我们的申请有例外。使用Dr.Watson,我们没有捕获任何dmp以及日志文件。我被告知,WinDbg是在程序的异常/崩溃时创建转储文件的替代方法。谷歌搜索后,我遇到了一堆混乱。首先,我想确认是否有可能在WinDbg的帮助下创建转储文件。第二,是否有任何推荐的简单命令行将WinDbg附加到应用程序以在崩溃时获取转储文件?非常感谢!
答案 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.aspx和http://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
您可能不需要其中一些命令,如果不需要,可以删除它们。