由于我的应用程序崩溃,我从Windows Store Apps提交过程中收到了一个小型转储(由审阅者发送)。我在为我的应用程序加载符号时遇到问题,因为该错误发生在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(以admin身份运行)时出现以下错误:
> ngen.exe install App.exe
[snip]
This operation is only valid in the context of an app container.
(Exception from HRESULT: 0x8007109A)

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

更新:经过很长时间的故障排除,并通过其他方法找出了根本原因之后,我得出的结论是,我得到的minidump文件缺少此信息。不管同轴电缆如何连接,调试器都可以为文件加载符号。

最佳答案

看一下工具描述Ngen.exe (Native Image Generator):



请记住此processor-specific machine code

如果您需要使用NI镜像调试minidump,则需要获取这些镜像的符号(PDB)。用于托管DLL的PDB将不起作用,您需要使用NGEN工具为NGEN的镜像生成 native PDB,请查看文章Creating NGEN PDBs for Profiling Reports。关于如何为Profiler Report获取NGEN pdbs的本文,但对于调试它是相同的。

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



更新:

从上面的link中:



因此,看起来您需要在装有minidump的同一台计算机上生成ngen模块/pdbs。

Windows有一个Native Image Service,当您将其安装到计算机上后,它会为Windows应用商店应用程序生成ni个镜像。您可以尝试使用procmon.exe查找Windows如何从Windows Store为应用程序生成ngen模块。 (只需使用ngen.exe对进程名称使用过滤器)。

关于c# - minidump中的.ni.dll和.ni.exe文件是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15894662/

10-10 22:26