检查来自UWP应用程序的转储文件

时间:2016-05-03 11:22:20

标签: c# debugging win-universal-app windows-10-mobile crash-dumps

首先我启用了在Windows 10移动电话上保存转储文件:

  

设置>更新&安全>对于开发人员>保存这么多崩溃转储:3

然后我调试了一个抛出异常的应用程序。停止后我继续调试。再次断开并连接移动电话后,我能够访问存储在Windows phone\Phone\Documents\Debug目录下的转储文件。该文件名为

FPCL.WIndows - a736c773-c105-4b30-a799-4bf317872f5e with exception C000027B on 5-03-2016 12.11.dmp

并且大约有140 MB!

我将文件复制到我的UWP应用程序的bin目录中。然后我在Visual Studio 2015中将其作为文件打开(在同一个项目中)。现在我可以看到转储摘要,我有以下按钮:

  • 仅使用托管进行调试
  • 使用混合
  • 进行调试
  • 仅使用Native进行调试
  • 设置符号路径
  • 全部复制到剪贴板

如果我运行 Debug with Managed Only ,我得

  

运行时捕获了致命异常。请参阅Watch窗口中的$ stowedexception以查看原始异常信息。

点击 Break 我得

  

没有兼容的代码在运行。所选的调试引擎不支持在当前线程上执行的任何代码(例如,只有本机运行时代码正在执行)。

Watch 1 窗口中,我看到以下内容

  

姓名:{CLR} $ stowedexception
  值:{“方法或操作未实现。”}   键入:System.NotImplementedException

这应该是我在我的应用程序中抛出的异常。当我打开这个节点并查看 StackTrace 时,我可以得到一个行号。按继续我得到

  

调试器无法继续运行该进程。调试转储文件时不支持此操作。

所以我只能阻止它。

如果我使用混合运行 Debug,我会再次使用

  

运行时捕获了致命异常。请参阅Watch窗口中的$ stowedexception以查看原始异常信息。

点击 Break 我得

  

kernelbase.pdb未加载   kernelbase.pdb包含查找模块KERNELBASE.dll的源代码所需的调试信息   模块信息:版本:10.0.10586.218(th2_release.160401-1800)原始位置:KERNELBASE.dll   请尝试以下选项之一:更改现有PDB和二进制搜索路径并重试:Microsoft Symbol Servers

在这里,我可以按加载新建。因此在给定位置下找不到kernelbase.pdb。它应该存在吗?我应该在哪里找到它?

Watch 1 窗口中,我看到与上面相同的内容,我只能将其停止。

如果我运行 Debug with Native Only ,我得

  

FPCL.WIndows中的0x76ECDF95(combase.dll)处于未处理的异常 - f736c883-f105-4d30-a719-4bf328872f5e,5-03-2016上有例外C000027B 12.11.dmp:0xC000027B:Anwendungsinterne Ausnahme(参数:0x075C6838,0x00000002)

并且在点击 Break 时,我得到了与上面相同的缺失kernelbase错误,但是在 Watch 1 窗口中, Value 是{{ 1}}。所以我只能阻止它。

根据这个post,我应该能够检查源代码并找到原因。但是如何正确检查这样的UWP转储文件?

1 个答案:

答案 0 :(得分:2)

你提到

  

[...] 0xC000027B [...]

     

[...] $ stowedexception [...]

这两个指标都表明转储中存在Stowed Exception。

要分析此类异常,请先查看Andrew Richards解释的Channel 9 Defrag Tools, episode 136,然后分析它们(3:28)。 然后从Defrag Tools OnDrive下载PDE扩展,并在而不是Visual Studio中分析您的转储。

关于kernelbase的符号,应从Microsoft符号服务器下载它们。要在WinDbg中进行设置,请使用.symfix;.reload。如果要在Visual Studio中再试一次,请转到Debug / Options并选择Debugging / Symbols,然后选中“Microsoft Symbol Servers”。

关于在Visual Studio中按下的按钮,在调试调试版本时选择“仅管理”,因为您的应用程序将在CoreCLR上运行并在调试版本构建时选择“仅本地”,因为您的应用程序将使用.NET本机运行时支持。 (如果您没有更改默认设置,则适用;否则根据您的编辑设置选择)