由于我的应用程序崩溃,我从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/