【发布时间】:2013-03-31 10:53:04
【问题描述】:
由于我的应用程序崩溃,我从 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 文件缺少此信息。不管怎样哄都可以让调试器加载文件的符号。
【问题讨论】:
-
.ni 文件是 NGEN 文件。
-
@leppie:谢谢你,帮了我不少忙。我自己无法使用 ngen 生成这些文件。显然它“仅在应用容器的上下文中有效”。我该如何解决?
-
如果这是一个托管应用程序,您甚至不需要使用
!analyze -v。为什么不加载 sos 看看是什么异常导致它崩溃? -
@Lex Li:我知道这是一个 StackOverflowException。但是,我无法弄清楚它起源于 my 代码的哪个位置,因为没有符号我无法获得完整的堆栈轨迹。
-
对于基于 .NET 的应用程序,sos 提供了 !CLRStack。即使没有符号,您也可以获得线程的正确托管调用堆栈并轻松找到罪魁祸首。
标签: c# windows-store-apps windbg windows-store