PC软件崩溃定位方式-系统日志

基本步骤:

  1. 查看WINDOWS事件日志,收集应用错误信息。

  1. 准备windbg环境。

  1. 定位代码位置。

  1. 查看事件日志错误。

打开WINDOWS事件日志--“应用程序”类目,找到对应程序的错误日志。

如下图所示:

得到以下有用信息:

1.异常代码: 0xc0000005。指示什么错误类型,这个代码值一般是非法指针。

2.错误偏移量: 0x0000100d。模块的代码位置。

3.错误应用程序路径: xxxxxxxxxxx\testdbg\output\testdbg.exe 崩溃的进程。

4.错误模块路径: xxxxxxxxxxx\testdbg\output\mydll3.dll。进程所加载DLL。

注意,第4点,一定要是自己编译的模块,并且有编译时候的PDB文件,才有意义。

假如崩溃在系统DLL或第三方DLL,则没有办法指定代码位置。

  1. 准备windbg环境。

  1. 启动windbg。

  1. 配置windbg的PDB文件路径,必须要日志提示的exe和dll对应的pdb文件。

  1. 通过windbg启动该exe。

  1. 定位代码位置

  1. 找到错误模块mydll3.dll的内存地址。

如下图,mydll3.dll模块开始地址是(十六进制):0x7b550000

  1. 计算错误代码地址

经过前面收集资料,得到如下信息:

模块开始位置:0x7b550000

错误偏移量:0x0000100d

错误代码位置=模块开始位置+错误偏移=0x7b550000+0x0000100d=0x7b55100d

  1. 查看错误地址代码

查看地址代码命令: ln addr

其中addr是十六进制地址,带不带前缀0x都可以。。

前面我们已经得到错误代码地址是0x7b55100d,

则输入命令:ln 7b55100d

如下图所示。

可以看到代码位置是mydll3.cpp(34),即在34行代码。

34行代码,如下图所示。

因是通过全局变量定义类ctmp的对象,所以,代码28行构造函数会被调用。从而20、21行代码执行,非法指针操作导致崩溃。

为什么定位到34,而不是21行?因为编译器优化后的结果,34行位置记录了构造函数信息。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值