调试能力可以说是最重要,尤其对于C/C++程序员而言,更是如此!
用神器WinDbg调试Dump文件需要三样东西:
1.毋庸置疑,肯定是Dump文件咯
2.源代码,必须与编译可执行文件时的代码一致
3.PDB文件,编译时生成的符号文件,一定是要与可执行文件同时生成的!(即便源代码一致,重新生成的PDB文件也不行。)
1、设置符号路径(生成二进制文件时对应的PDB文件所在目录,版本要一致!多个二进制文件的pdb最好生在同一目录):
多个PDB的路径以英文分号(;)作为间隔,其中代码可能会使用到微软相关库的符号,可以在符号路径中添加微软符号服务器的路径(一般不用添加,调试内核程序的时候需要),如下:
srv*C:\symbols*http://msdl.microsoft.com/download/symbols
2、设置源码路径(项目的solution文件所在目录,多个项目可以加到一个solution里面):
3、用WinDbg打开dump文件(注意,要最后才打开dmp文件)
如果使用了微软符号服务器,那么要稍微多等半分钟左右
4、执行命令: !analyze -v
此时WinDbg会分析出崩溃时的堆栈信息以及代码出错位置。
普通的Bug,通过以上操作再加上简单分析,应该就可以搞定了,下面讲一下更高级一些的操作:
1、查看崩溃时的变量值:
输入.ecxr;kbn得到崩溃的堆栈
输入.frame 0 切到第0帧
输入 dv 查看当前帧的一些变量信息
留坑后面再补充
以上是分析崩溃的部分方法,还有其他一些方法可以参考如下文章:
利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏 - 走看看
如何使用WinDbg查找蓝屏原因 - zhaotianff - 博客园
————————————————