我们的应用程序出现异常。使用 Dr.Watson 我们没有捕获任何 dmp 以及日志文件。有人告诉我,WinDbg 是在程序异常/崩溃时创建转储文件的替代方法。谷歌搜索后,我遇到了一堆混乱。首先,我想确认是否可以在 WinDbg 的帮助下创建转储文件。其次,是否有任何推荐的简单命令行将 WinDbg 附加到应用程序以在其崩溃时获取转储文件?非常感谢!
4 回答
在这种情况下,我们通常建议我们的用户下载procdump(可以直接从 zip 文件中提取,无需安装),然后我们给他们一个包含如下内容的批处理文件:
mkdir c:\dumps
procdump -e -c 10 -w myprocess.exe c:\dumps
当进程生成未处理的异常时,它将在c:\dumps
您可以加载到 Visual Studio 或 Windbg 的目录中创建一个转储文件(该!analyze -v
命令是您的朋友)
您可以使用 WinDbg .dump 命令,
.dump /mfh /u C:\crash.dmp
对于崩溃场景,另外两个工具更适合,
选择最佳工具确认 WinDbg 将帮助您创建转储文件,但也提供了一些可能更易于使用的替代方法。
如果您可以在异常处理程序中拦截崩溃,那么您可以使用代码编写转储: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.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
您可能不需要其中一些命令,如果不需要,您可以删除它们。