如何调试"ngen"ed图像的WER minidump

Edw*_*rey 8 minidump ngen postmortem-debugging windows-error-reporting

当在安装时在.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 - >找不到匹配的二进制文件.

小智 3

调试这些转储的最简单方法是使用 Windows 调试器(Windbg、cdb 或 ntsd)并加载 SOS 调试器扩展(您可以搜索 SOS 了解更多详细信息)。

据我记得,只要你有原始的 EXE 和符号,NGEN 的部分对 SOS 来说就不重要(因为它是你的应用程序,我希望你有非 ngen 的 exe 和符号) )。