【发布时间】:2009-10-05 17:15:33
【问题描述】:
当安装时在 .NET 托管应用程序上执行 ngen 并从应用程序的 Windows 错误报告中检索故障转储时,您如何使用它来查看堆栈跟踪、变量等?
以下是与该问题相关的一些背景知识:我们有一个在安装时生成的 .NET 应用程序。当它由于未处理的 .NET 异常而崩溃时,崩溃会存储在 Windows 错误报告中,并且我可以从 winqual.microsoft.com 下载 minidump.mdmp 文件。
我将 minidump.mdmp 放在包含 .dbg 文件的文件夹中,用于构建崩溃的应用程序,然后双击 minidump.mdmp 以在 VS2008 SP1 的新实例中打开它。我的堆栈跟踪如下所示:
kernel32.dll!RaiseException() + 0x3d 字节
mscorwks.dll!RaiseTheExceptionInternalOnly() + 0x295 字节
mscorwks.dll!JIT_Throw() + 0x130 字节
MyApp.ni.exe!000007feee74c84c()
[以下帧可能不正确和/或丢失,没有为 MyApp.ni.exe 加载符号]
0000000070000d5e()
MyApp.ni.exe!000007feee611000()
000000000300bf78()
000000000300bf60()
Modules 窗口表明为 OS 和 .NET DLL 加载了符号,但对于应用程序模块,我得到了这个:
MyApp.exe -> 符号文件中没有本机符号。
MyApp.ni.exe -> 找不到匹配的二进制文件。
MyAppsLibrary.ni.dll -> 找不到匹配的二进制文件。
【问题讨论】:
-
也许是个愚蠢的问题,您是否在编译应用时定义了 DEBUG 以便创建 .pdb 文件?
-
Stack Overflow 的这个问题可能很有趣。 stackoverflow.com/questions/850617/…
-
应用程序是使用 Release 配置构建的,并且未定义 DEBUG;但是,发布配置设置为输出 pdb 文件(“pdb-only”设置),我有 pdb 文件。我以前曾使用这种方法成功调试过 Win32 本机应用程序,但这是我第一次尝试生成 .NET 应用程序。
-
也感谢 scope-creep 提供链接。不幸的是,stackoverflow 链接只涵盖了获取故障转储。我有崩溃转储,但不知道如何使用它。 “调试工具和符号”有点吓人,因为它的支持列表包括本机应用程序,但它没有提到托管应用程序。 :-(
标签: minidump ngen postmortem-debugging windows-error-reporting