C++ 如何使用WinDbg分析VC+的崩溃转储+;应用
如何分析转储文件?这是一个非常广泛的问题C++ 如何使用WinDbg分析VC+的崩溃转储+;应用,c++,visual-c++,windbg,crash-dumps,C++,Visual C++,Windbg,Crash Dumps,如何分析转储文件?这是一个非常广泛的问题 第一步是将转储文件加载到WinDbg实例中 接下来,您需要确保您有一个符号设置 最后,您可以运行命令!analyze-v以获取对其执行的基本分析。您需要为代码提供符号信息,以使转储文件有价值 该网站为我提供了大量信息。我也很喜欢马里奥·赫瓦特和丹尼尔·普拉瓦特写的这本书。苔丝·费兰德斯必须从Windbg开始。我强烈推荐它们。以下是一些常规步骤,可以帮助您顺利完成任务: 首先,您必须更改编译器的设置,以便它创建PDB文件,即使是发布版本。编译器的后期版本默
!analyze-v
以获取对其执行的基本分析。您需要为代码提供符号信息,以使转储文件有价值该网站为我提供了大量信息。我也很喜欢马里奥·赫瓦特和丹尼尔·普拉瓦特写的这本书。苔丝·费兰德斯必须从Windbg开始。我强烈推荐它们。以下是一些常规步骤,可以帮助您顺利完成任务: 首先,您必须更改编译器的设置,以便它创建PDB文件,即使是发布版本。编译器的后期版本默认是这样做的,但是在VisualC++的许多版本中,您必须自己完成。创建程序数据库文件,然后在应用程序的每个构建过程中保留这些文件的存档。至关重要的是,应用程序的每个构建都有自己的PDB集。例如,您不能重复使用在Build10中创建的相同转储来检查Build15生成的转储。在项目的整个生命周期中,您将得到大量的PDB,因此请为此做好准备 接下来,您需要能够识别生成转储文件的应用程序的确切版本。如果您正在创建自己的迷你转储文件(例如,通过调用),最简单的方法可能是将迷你转储文件名的一部分作为应用程序的完整版本号。您需要有一个合理的版本编号方案,以使其正常工作。在我的商店里,每次autobuilder创建构建时,我们都会将所有分支的构建编号增加一 现在您已经从客户处收到了转储文件,您知道了创建转储的应用程序的确切版本,并且找到了此版本的PDB文件 现在,您需要查看源代码管理的历史记录,并找到该软件的确切版本的源代码。做到这一点的最佳方法是在每次生成时将“标签”应用于分支。将标签的值设置为精确的版本号,这样就很容易在历史记录中找到它 您几乎可以启动WinDbg/Visual C++:
c:\app\u build\u 1.0.100
1.0 build\100版应用程序.symfix
。这可能需要一些时间,因为它将从互联网上下载大量内容.sympath+c:\pdblocation
,将PDB文件替换为路径名。请确保在.sympath
和+
符号之间没有空格,否则会破坏步骤3.srcpath c:\app\u build\u 1.0.100
将从源代码管理获取代码的路径替换为此版本的软件!分析-v
$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D
命令备忘单