miniidump中的.ni.dll和.ni.exe文件是什么?

本文关键字:ni 文件 是什么 exe 中的 dll miniidump | 更新日期: 2023-09-27 18:08:05

由于我的应用程序崩溃,我从Windows Store应用程序提交过程(由评论者发送)中获得了一个迷你转储。我在加载应用程序的符号时遇到了问题,因为错误发生在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)

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

Update:经过长时间的故障排除,并通过其他方式找出根本原因后,我得出结论,我得到的迷你转储文件缺少此信息。

miniidump中的.ni.dll和.ni.exe文件是什么?

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

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

请记住这个processor-specific machine code .

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

正如我所说的,请记住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的副本

更新:

从上面的链接:

如果你远程分析了一个Windows Store应用程序,你必须在运行该应用程序的机器上执行此操作。如果您在

上查看报告的机器上执行此操作,则无法工作。

因此,看起来您需要在获得minidump的同一台机器上生成ngen模块/pdbs。

Windows有一个原生映像服务,当你在机器上安装它时,它会在一段时间后为Windows Store应用程序生成ni映像。您可以尝试使用procmon.exe来查找Windows如何为Windows Store中的应用程序生成ngen模块。

NI=Native Image。换句话说,NGEN'd图像如上面的注释所示。