9

由于我的应用程序崩溃,我从 Windows 应用商店应用程序提交过程(由审阅者发送)中获得了一个小型转储。我在为我的应用程序加载符号时遇到问题,因为错误发生在App.ni.exe我不知道来自哪里的文件内部。

我的应用程序只有一个App.exe(和一些 DLL),但转储一直引用.ni.dll.ni.exe. .appx在我的或文件中找不到这些.appxsym文件。

我的应用是为每个特定平台(x86、x64 和 ARM)构建的。在 stackdump 中崩溃的是 x64 版本。

我目前对windbg的尝试:

符号路径:

Srv*C:\Users\Vegard\Appdata\local\temp\SymbolCache*http://msdl.microsoft.com/download/symbols`

Windbg 尝试:

0:006> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

Unable to load image Newtonsoft.Json.ni.dll, Win32 error 0n2
*** WARNING: Unable to verify checksum for Newtonsoft.Json.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for Newtonsoft.Json.ni.dll
Unable to load image App.ni.exe, Win32 error 0n2
*** WARNING: Unable to verify checksum for App.ni.exe
*** ERROR: Module load completed but symbols could not be loaded for App.ni.exe
Unable to load image mscorlib.ni.dll, Win32 error 0n2
*** WARNING: Unable to verify checksum for mscorlib.ni.dll

更新:尝试 ngen App.exe(以管理员身份运行)我收到以下错误:

> ngen.exe install App.exe
[snip]
This operation is only valid in the context of an app container. 
(Exception from HRESULT: 0x8007109A)

在这种情况下,什么是应用容器?我应该从哪里运行它?

更新:经过长时间的故障排除,并通过其他方式找出根本原因,我得出的结论是我得到的 minidump 文件缺少此信息。无论哄骗都可以让调试器加载文件的符号。

4

2 回答 2

10

看一下工具说明Ngen.exe (Native Image Generator)

本机映像生成器 (Ngen.exe) 是一种提高托管应用程序性能的工具。Ngen.exe 创建本机映像,这些文件包含已编译的特定于处理器的机器代码,并将它们安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时 (JIT) 编译器来编译原始程序集。

请记住这一点processor-specific machine code

如果您需要使用 NI 映像调试 minidump,则需要获取这些映像的符号 (PDB)。托管 DLL 的 PDB 将不起作用,您需要使用 NGEN 工具为 NGEN 映像生成本机 PDB,请查看文章为分析报告创建 NGEN PDB。这篇关于如何为 Profiler Report 获取 NGEN pdbs 的文章,但对于调试它是相同的。

正如我所说,请记住 NGEN 是一个processor-specific machine code,因此要为它们生成 PDB:

由于 NGEN 的映像是本机的,因此使用与您正在分析的应用程序 (x86/x64/ARM) 的体系结构相匹配的 ngen.exe 副本非常重要。例如,如果应用程序在 Windows 8 RTM 上运行 64 位,那么您需要在“C:\Windows\Microsoft.NET\Framework64\v4.0.30319”中引用 ngen.exe 的副本</p>

更新:

从上面的链接

如果您远程分析了 Windows 应用商店应用程序,则必须在分析时在运行应用程序的机器上执行此操作。如果您在正在查看报告的机器上执行此操作,它将不起作用

因此,您似乎需要在获得 minidump 的同一台机器上生成 ngen 模块/pdb。

Windows 有一个Native Image Service,当你在你的机器上安装一段时间后,它会为 Windows Store Applications 生成 ni 图像。您可以尝试使用procmon.exe来了解 Windows 如何为 Windows Store 中的应用程序生成 ngen 模块。(只需使用带有 ngen.exe 的进程名称过滤器)。

于 2013-04-09T18:35:12.860 回答
3

NI=本机图像。换句话说,如上面的评论所示,NGEN 的图像。

于 2013-04-09T18:19:10.590 回答