非必现BUG修改,WinDbg调试dump信息,分析崩溃

本文无图,只提供一个思路,算是这两天处理问题的一个心得,供参考。

最近两天工作中出现了一个非必现的BUG ,由于是内部使用的PE文件,每次测试都需要签名,如果DEBUG模式会非常麻烦,因此采用分析dump信息的方式。

(VS程序怎么生成dump,搜一下配置即可)

用WinDbg 打开 dump文件(再搜,有非常多的教程,只看打开和配置符号就行)

Open crash dump    - >  打开dump文件

Sysbol path file ->  配置pcb文件路径   (随便选个路径,把pcb扔到里边就行)

如果你的解决方案里 有多个项目,并且互相有依赖 ,把运行的那个对应的pcb扔进去就行了

(什么?没有pcb,……,自己搜一下怎么配置)

导入dump文件后,如果有让你 .ecxr 就执行这个,没有的话就 执行!analyze -v 

kv查看堆栈    缺少符号就重新导入 pcb   ,再去 .reload

ld 名字无后缀,查看符号有没有被加载

只要符号加载上了,就能看出错误信息出现在哪一处了,具体问题,去程序里具体分析就好。

我本次遇见的是非必现的BUG

出现在指针reset(new )问题上,期初以为是new的问题,更改成new(nothrow)依旧无效,

那可能就不是new的问题, 去看new的那个对象的构造函数,是否有出现崩溃,本次排查是

指针没有初始化。

由于没有初始化,指针指向未知,可能指向的可访问地址,也可能是不可访问地址

后续如果有对指针的判断,那可能出现非必现问题。

开发工作一定严禁,一行疏忽,排查起来可能要用一天时间

上一篇:Windbg命令系列---#(汇编搜索)


下一篇:茫茫内存,我该如何用 windbg 找到你 ?