如何使用WinDbg分析转储文件?
以下是一些通用步骤,可帮助您开始:
首先,您必须更改编译器的设置,以便即使在发布版本中也创建PDB文件。最新版本的Visual C++编译器默认情况下会执行此操作,但在许多旧版本的Visual C++中,您必须自己完成此操作。创建程序数据库文件,然后将这些文件的存档与每个应用程序构建一起保存。每个应用程序构建都必须有自己的一组PDB非常重要。例如,您不能仅使用使用第10次构建时生成的相同PDB来检查由第15次构建生成的转储。在项目的整个生命周期中,您将拥有大量的PDB,请为此做好准备。
接下来,您需要能够确定生成转储文件的应用程序的确切版本。如果您正在创建自己的MiniDump(例如通过调用 MiniDumpWriteDump()),那么最简单的方法可能是将MiniDump文件名中的部分作为应用程序的完整版本号。您需要有一个合理的版本编号方案才能使此方法起作用。在我的商店中,每次自动构建器创建构建时,我们将构建编号在所有分支上递增一次。c:\app_build_1.0.100
,表示应用程序版本1.0构建#100。现在您有两种查看转储文件的选项。您可以使用Visual Studio或WinDbg。使用Visual Studio更容易,但WinDbg更加强大。大多数情况下,Visual Studio中的功能就足够了。
要使用Visual Studio,您只需像打开项目一样打开转储文件即可。一旦打开,“运行”转储文件(默认情况下为F5),如果所有路径都设置正确,它将带您直接到崩溃的代码,提供调用堆栈等信息。
要使用WinDbg,您必须跨过几个障碍:
.symfix
。这可能需要一些时间,因为它会从互联网上下载大量内容。.sympath+ c:\pdblocation
,将 PDB 文件的路径名替换为您放置它们的位置。确保在 .sympath
和 +
之间没有空格,并且加号在那里,否则您将破坏第3步。.srcpath c:\app_build_1.0.100
,将获取软件此版本的源代码的路径替换为该路径。!analyze -v
几秒钟后,如果一切都配置正确,WinDbg将带您直接到崩溃位置。此时,您有无数选项来深入挖掘应用程序的内存空间、关键部分的状态、窗口等等。但这超出了本文的范围。
祝好运!
(请参见下面的“转储”部分)
了解工作区的工作原理...
"cmdtree"允许您定义一个“菜单”,以便轻松访问常用命令,而无需记住简短的命令名称。
您不必将所有命令定义放入同一个cmdtree文本文件中...如果您愿意,可以将它们分开并加载多个文件(然后它们就会有自己的窗口)。
$$ 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
“扩展”允许您扩展WinDBG支持的命令/功能范围。
一些博客(混合了本地和托管代码调试)。
这是一个非常广泛的问题。
!analyze -v
对其进行基本分析。 您需要为代码提供符号信息以使转储文件有用。网站Memory Dump, Software Trace, Debugging, Malware, Victimware and Intelligence Analysis Portal对我非常有帮助。 我也非常喜欢Mario Hewardt和Daniel Pravat的书Advanced Windows Debugging。