4

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

4

4 回答 4

5

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

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

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

于 2012-05-14T20:29:00.373 回答
3

您可以使用 WinDbg .dump 命令,

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

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

于 2012-06-19T05:28:28.640 回答
2

选择最佳工具确认 WinDbg 将帮助您创建转储文件,但也提供了一些可能更易于使用的替代方法。

于 2012-05-14T16:14:32.287 回答
1

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

否则,您需要指示 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.aspxmsdn

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

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

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

于 2012-05-14T15:57:09.217 回答