WinDbg在崩溃时创建转储文件?

时间:2012-05-14 15:13:27

标签: .net debugging windbg dump

我们的申请有例外。使用Dr.Watson,我们没有捕获任何dmp以及日志文件。我被告知,WinDbg是在程序的异常/崩溃时创建转储文件的替代方法。谷歌搜索后,我遇到了一堆混乱。首先,我想确认是否有可能在WinDbg的帮助下创建转储文件。第二,是否有任何推荐的简单命令行将WinDbg附加到应用程序以在崩溃时获取转储文件?非常感谢!

4 个答案:

答案 0 :(得分:4)

在这种情况下,我们通常建议用户下载procdump(可以从zip文件中提取,无需安装)然后我们给他们一个包含以下内容的批处理文件:

mkdir c:\dumps
procdump -e -c 10 -w myprocess.exe c:\dumps

当进程生成未处理的异常时,它将在c:\dumps目录中创建一个转储文件,您可以将其加载到Visual Studio或Windbg中(!analyze -v命令是您的朋友)

答案 1 :(得分:2)

Choosing the Best Tool确认WinDbg将帮助您创建转储文件,但也提供了一些可能更容易使用的替代方案。

答案 2 :(得分:2)

您可以使用WinDbg .dump命令,

.dump /mfh /u C:\crash.dmp 

对于崩溃场景,另外两种工具更合适,

答案 3 :(得分:1)

如果您可以拦截异常处理程序中的崩溃,那么您可以使用代码编写转储: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360%28v=vs.85%29.aspx

否则,您需要指示Dr. Watson使用特定标志拦截并为您创建转储,这些标志指定转储将保留的详细程度:http://blogs.technet.com/b/askperf/archive/2007/06/15/capturing-application-crash-dumps.aspxhttp://social.technet.microsoft.com/wiki/contents/articles/8103.application-crash-dump-analysis-windows-7.aspx以及msdn

要从命令行执行此操作,您需要执行以下操作:

cdb -pn myApp.exe -c ".symfix;.reload;.dump /ma c:\memdump\crash.dmp;qd"

这假定cdb.exe路径是可搜索的,您可能需要使用完整路径作为前缀:

C:\Program Files (x86)\Debugging Tools for Windows (x86)\cdb -pn myApp.exe -c ".symfix;.reload;.dump /ma c:\memdump\crash.dmp;qd"

所以这里的命令

cdb -pn   -->attaches cdb to your process name myApp.exe
-c        -->execute command
.symfix   -->fix microsoft symbols
.reload   -->reload
.dump /ma c:\memdump\crash.dmp --> write minidump to location (the flags /ma is effectively everything you want)
qd        -->quit and detach

您可能不需要其中一些命令,如果不需要,可以删除它们。