当在安装时在.NET托管应用程序上执行ngen,并从应用程序的Windows错误报告中检索崩溃转储时,如何使用它来查看堆栈跟踪,变量等?
以下是与该问题相关的一些背景知识:我们有一个.NET应用程序,可以在安装时使用.当由于未处理的.NET异常而崩溃时,崩溃将在Windows错误报告中进行存储,从中我可以从winqual.microsoft.com下载minidump.mdmp文件.
我将minidump.mdmp放在一个包含.dbg文件的文件夹中,用于构建崩溃的应用程序,然后双击minidump.mdmp在VS2008 SP1的新实例中打开它.我的堆栈跟踪如下所示:
kernel32.dll!RaiseException()+ 0x3d bytes
mscorwks.dll!RaiseTheExceptionInternalOnly()+ 0x295 bytes
mscorwks.dll!JIT_Throw()+ 0x130 bytes
MyApp.ni.exe!000007feee74c84c()
[下面的框架可能不正确和/或缺失,没有为MyApp.ni.exe加载的符号]
0000000070000d5e()
MyApp.ni.exe!000007feee611000()
000000000300bf78()
000000000300bf60()
模块窗口指示为OS和.NET DLL加载符号,但对于应用程序模块,我得到:
MyApp.exe - >符号文件中没有本机符号.
MyApp.ni.exe - >找不到匹配的二进制文件.
MyAppsLibrary.ni.dll - >找不到匹配的二进制文件.
在我无法访问的客户机器(WinXP SP2)上,我有一个在启动时崩溃的Win32 EXE(非托管C++).我想解决此问题的最佳方法是获取(小型)转储并稍后使用windbg或类似方法进行分析.
现在,我通常会告诉客户安装Windows调试工具并运行
cscript adplus.vbs -crash
Run Code Online (Sandbox Code Playgroud)
但是,您似乎无法将adplus用于在启动时崩溃的应用程序(http://support.microsoft.com/kb/q286350/说"在以下情况下不要使用ADPlus:如果必须对程序进行故障排除或在启动期间意外退出的进程").同一篇文章说"使用用户模式进程转储",但我未能成功安装它.
知道如何在Win32上启动崩溃的进程转储?