Veg*_*sen 9 c# windbg windows-store windows-store-apps
由于我的应用程序崩溃,我从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`
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
更新:尝试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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,什么是应用容器?我应该从哪里运行它?
更新:经过一段时间的故障排除,并通过其他方式找出根本原因,我得出结论,我得到的minidump文件缺少此信息.无论是否哄骗都可以让调试器加载文件的符号.
out*_*man 10
看看工具描述Ngen.exe(Native Image Generator):
Native Image Generator(Ngen.exe)是一种可以提高托管应用程序性能的工具.Ngen.exe创建本机映像,这些映像是包含已编译的特定于处理器的计算机代码的文件,并将它们安装到本地计算机上的本机映像缓存中.运行时可以使用来自缓存的本机映像,而不是使用实时(JIT)编译器来编译原始程序集.
请记住这一点processor-specific machine code.
如果需要使用NI图像调试minidump,则需要为这些图像获取符号(PDB).托管DLL的PDB不起作用,您需要使用NGEN工具为NGEN的图像生成Native PDB,请查看文章Creating NGEN PDB for Profiling Reports.这篇文章关于如何获取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的副本
更新:
从上面的链接:
如果远程配置了Windows应用商店应用,则必须在分析时运行应用的计算机上执行此操作.如果您在正在查看报告的计算机上执行此操作,则无法使用它
所以看起来你需要在你得到minidump的同一台机器上生成ngen modules/pdbs.
Windows具有本机映像服务,在您将其安装到计算机上一段时间后,它会为Windows应用商店应用程序生成ni映像.您可以尝试使用procmon.exe来查找Windows如何从Windows应用商店为应用程序生成ngen模块.(只需使用带有ngen.exe的Process Name过滤器).
| 归档时间: |
|
| 查看次数: |
8908 次 |
| 最近记录: |