[发明专利]一种应用的调试方法及装置有效
申请号: | 201611129967.5 | 申请日: | 2016-12-09 |
公开(公告)号: | CN108614763B | 公开(公告)日: | 2022-01-04 |
发明(设计)人: | 周志刚 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 应用 调试 方法 装置 | ||
本发明公开了一种应用的调试方法及装置,所述调试方法包括:当第一内存地址被访问时,获取当前执行代码的第二内存地址,其中,所述第一内存地址为在应用程序进程的所有线程中设置硬件断点时设置的需要访问监控的内存地址;通过当前执行代码的第二内存地址,获取对应的模块信息;通过所述模块信息和所述第二内存地址相对于对应的模块的偏移,获取对应的访问代码,以根据所述访问代码进行调试。本发明解决了如何在用户电脑上定位异常的技术问题,达到了在用户电脑上能够统计一个内存的读写访问点进行调试、定位异常的技术效果。
技术领域
本发明涉及计算机技术领域,特别涉及一种应用的调试方法及装置。
背景技术
对于Windows应用程序发布以后,通常会遇到程序崩溃的BUG。而从程序BUG的统计来看,内存访问异常是最容易产生BUG。对于C++程序来说,指针的释放及使用是出现问题最多。程序开发者的电脑上遇到程序崩溃可以使用编译器进行调试来找到指针的内存读写访问的发生位置,具体哪个位置最后读或者写导致产生的问题。
但是对于已经发布的应用,如果问题出现在用户的电脑上,且出现的问题属于偶然现象,则需要通过应用程序在用户电脑上能够统计一个内存的读写访问点,以通过读写访问点的代码来定位到出问题的原因。
发明内容
本发明提供一种应用的调试方法及装置,解决了如何在用户电脑上定位异常的技术问题,达到了在用户电脑上能够统计一个内存的读写访问点进行调试、定位异常的技术效果。
第一方面,本申请提供一种应用的调试方法,所述调试方法包括:
当第一内存地址被访问时,获取当前执行代码的第二内存地址,其中,所述第一内存地址为在应用程序进程的所有线程中设置硬件断点时设置的需要访问监控的内存地址;
通过当前执行代码的第二内存地址,获取对应的模块信息;
通过所述模块信息和所述第二内存地址相对于对应的模块的偏移,获取对应的访问代码,以根据所述访问代码进行调试。
优选的,所述调试方法还包括:
通过从配置服务器获取模块名称和偏移地址,并通过所述模块名称获取所述模块的起始地址,通过所述模块的起始地址和所述偏移地址,得到全局的第三内存地址,并将所述第三内存地址作为所述第一内存地址。
优选的,所述在所述应用程序进程的所有线程中设置硬件断点,具体包括:
通过API函数CreateToolhelp32Snapshot来获取线程的快照,并将其中参数设置为TH32CS_SNAPTHREAD;
通过API函数Thread32First来获取第一个线程的信息,所述线程的信息包括线程的ID和线程所属的进程ID,通过进程ID过滤不属于所述应用程序进程的线程;并通过API函数Thread32Next遍历到所有的线程;
对于每个线程通过调用API函数GetThreadContext来获取线程的上下文信息,并传入参数CONTEXT_DEBUG_REGISTERS,以获取线程上下文的寄存器信息;
设置寄存器的值以及设置需要监控的第一内存地址;通过API函数SetThreadContext将寄存器的值设置到线程的上下文中。
优选的,所述获取当前执行代码的第二内存地址,具体包括:
从CPU的IP寄存器中获取当前执行代码的第二内存地址。
优选的,所述通过当前执行代码的第二内存地址,获取对应的模块信息,具体包括:
通过API函数VirtualQuery获取所述第二内存地址对应的动态链接库文件的句柄,并获取到对应的模块在内存中的基地址;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611129967.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种浏览器测试方法及装置
- 下一篇:IMA应用软件故障注入方法