看完了很久,也一直没有完成这篇博客,在项目使用中,大多数还是用到其中的一些命令去解析,目前没有太多机会,可以让自己用基本命令去锻炼一下“遍历堆链表”等高级调试技巧。看完这本书给我最大的感觉是:
当你觉得你有些比较难解决的调试或检测问题的时候,不妨查一查是不是有相应的工具。开发过程中需要的各种分析、检测、调试工具,这本书上都有或多或少的讲解。
- WinDbg 堆栈解析能力天生比vs强很多。每当程序宕掉,发现Visual studio 的【Call Stack】窗口全是汇编地址的时候,我会果断【打开 WinDbg 】-》【非入侵式Attch】,然后 WinDbg 的【Call Stack】窗口中就会显示正常的函数符号。这实际是 WinDbg 对被破坏的调用站栈,进行深度解析的结果,从而能够恢复出调用堆栈。
- 除了Wbg之外,最常用的还是GFlag,AppVerif,LeakDiag这几个工具,具体的用法我觉得其他的文档讲的已经非常好了。
- 另外Dump的解析当中,!analyze -v是个非常好用的命令,把一般Dump的解析过程封装成一个命令,只需敲一个命令,你就能得到最关键的信息,如调用堆栈。
另外作为福利,放上一个的Dump自动解析工具:
前提条件:
使用说明:
文件说明:
- 安装WinDbg,将WinDbg所在目录设置为环境变量目录。
使用说明:
- 将dump对应的所有pdb放入pdb_src目录下。
- 拖拽pdb_src目录至pdbstore.bat(实际上相当于把pdb_src路径作为参数,传递给pdbstore.bat),产生pdb tree(WinDbg天生支持的一个exe不同版本的pdb生成一个pdb tree,根据dump智能找到对应的pdb)
- 将所有的dump压缩包放入DumpZip文件夹(没有就新建此文件夹)中,然后拖动DumpZip文件夹,将其放入0_BatchDumpProcessor.bat 的批处理中(相当于使用命令:0_BatchDumpProcessor.bat DumpZip全路径)。
- 如果不是dump压缩包,即最终的dump文件,将所有的dump放入Dump文件夹(没有就新建此文件夹)中,然后拖动Dump文件夹,将其放入0_BatchDumpAnalyze.bat 的批处理中。
文件说明:
- 0_BatchDumpProcessor.bat
完整Dump分析批处理,先解压目录下所有dump的压缩包,然后逐一解析dump,并将解析结果汇总到一个execl表中。execl表中会显示某种dump宕了多少次,以及相应的堆栈调用。
- 0_BatchDumpUnzip.bat
解压指定目录下所有dump压缩包。
- 0_BatchDumpAnalyze.bat
解析一个目录下所有dump文件,将所有解析结果的text文件,放到另外一个目录。
- dumpanalyze.bat
解析一个dump文件,输出一个解析结果文件。
- 0_BatchDumpAnalyzeExtractor.bat
解析一个目录下所有text文件,将其中调用堆栈抽离出来,汇总到一个execl表中,方便浏览查看。
- DumpFileExtractor.exe
dumpanalyze.bat调用的实际程序。
- unzip.exe
0_BatchDumpUnzip.bat调用的实际程序。