【技术实现步骤摘要】
一种应用的调试方法及装置
本专利技术涉及计算机
,特别涉及一种应用的调试方法及装置。
技术介绍
对于Windows应用程序发布以后,通常会遇到程序崩溃的BUG。而从程序BUG的统计来看,内存访问异常是最容易产生BUG。对于C++程序来说,指针的释放及使用是出现问题最多。程序开发者的电脑上遇到程序崩溃可以使用编译器进行调试来找到指针的内存读写访问的发生位置,具体哪个位置最后读或者写导致产生的问题。但是对于已经发布的应用,如果问题出现在用户的电脑上,且出现的问题属于偶然现象,则需要通过应用程序在用户电脑上能够统计一个内存的读写访问点,以通过读写访问点的代码来定位到出问题的原因。
技术实现思路
本专利技术提供一种应用的调试方法及装置,解决了如何在用户电脑上定位异常的技术问题,达到了在用户电脑上能够统计一个内存的读写访问点进行调试、定位异常的技术效果。第一方面,本申请提供一种应用的调试方法,所述调试方法包括:当第一内存地址被访问时,获取当前执行代码的第二内存地址,其中,所述第一内存地址为在应用程序进程的所有线程中设置硬件断点时设置的需要访问监控的内存地址;通过当前执行代 ...
【技术保护点】
1.一种应用的调试方法,其特征在于,所述调试方法包括:当第一内存地址被访问时,获取当前执行代码的第二内存地址,其中,所述第一内存地址为在应用程序进程的所有线程中设置硬件断点时设置的需要访问监控的内存地址;通过当前执行代码的第二内存地址,获取对应的模块信息;通过所述模块信息和所述第二内存地址相对于对应的模块的偏移,获取对应的访问代码,以根据所述访问代码进行调试。
【技术特征摘要】
1.一种应用的调试方法,其特征在于,所述调试方法包括:当第一内存地址被访问时,获取当前执行代码的第二内存地址,其中,所述第一内存地址为在应用程序进程的所有线程中设置硬件断点时设置的需要访问监控的内存地址;通过当前执行代码的第二内存地址,获取对应的模块信息;通过所述模块信息和所述第二内存地址相对于对应的模块的偏移,获取对应的访问代码,以根据所述访问代码进行调试。2.如权利要求1所述的调试方法,其特征在于,所述调试方法还包括:通过从配置服务器获取模块名称和偏移地址,并通过所述模块名称获取所述模块的起始地址,通过所述模块的起始地址和所述偏移地址,得到全局的第三内存地址,并将所述第三内存地址作为所述第一内存地址。3.如权利要求1所述的调试方法,其特征在于,所述在所述应用程序进程的所有线程中设置硬件断点,具体包括:通过API函数CreateToolhelp32Snapshot来获取线程的快照,并将其中参数设置为TH32CS_SNAPTHREAD;通过API函数Thread32First来获取第一个线程的信息,所述线程的信息包括线程的ID和线程所属的进程ID,通过进程ID过滤不属于所述应用程序进程的线程;并通过API函数Thread32Next遍历到所有的线程;对于每个线程通过调用API函数GetThreadContext来获取线程的上下文信息,并传入参数CONTEXT_DEBUG_REGISTERS,以获取线程上下文的寄存器信息;设置寄存器的值以及设置需要监控的第一内存地址;通过API函数SetThreadContext将寄存器的值设置到线程的上下文中。4.如权利要求1所述的调试方法,其特征在于,所述获取当前执行代码的第二内存地址,具体包括:从CPU的IP寄存器中获取当前执行代码的第二内存地址。5.如权利要求1所述的调试方法,其特征在于,所述通过当前执行代码的第二内存地址,获取对应的模块信息,具体包括:通过API函数VirtualQuery获取所述第二内存地址对应的动态链接库文件的句柄,并获取到对应的模块在内存中的基地址;通过所述第二内存地址减去所述模块在内存中的基地址,以获取所述第二内存地址相对于所述模块的偏移;通过所述句柄调用函数GetModuleBaseName获取模块信息。6.一种应用的调试装置,其特征在于,所述调试装置包括:第一地址获...
【专利技术属性】
技术研发人员:周志刚,
申请(专利权)人:武汉斗鱼网络科技有限公司,
类型:发明
国别省市:湖北,42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。