首先我启用了在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中将其作为文件打开(在同一个项目中)。现在我可以看到转储摘要,我有以下按钮:
如果我运行 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转储文件?
答案 0 :(得分:2)
你提到
[...] 0xC000027B [...]
[...] $ stowedexception [...]
这两个指标都表明转储中存在Stowed Exception。
要分析此类异常,请先查看Andrew Richards解释的Channel 9 Defrag Tools, episode 136,然后分析它们(3:28)。 然后从Defrag Tools OnDrive下载PDE扩展,并在windbg而不是Visual Studio中分析您的转储。
关于kernelbase
的符号,应从Microsoft符号服务器下载它们。要在WinDbg中进行设置,请使用.symfix;.reload
。如果要在Visual Studio中再试一次,请转到Debug / Options并选择Debugging / Symbols,然后选中“Microsoft Symbol Servers”。
关于在Visual Studio中按下的按钮,在调试调试版本时选择“仅管理”,因为您的应用程序将在CoreCLR上运行并在调试版本构建时选择“仅本地”,因为您的应用程序将使用.NET本机运行时支持。 (如果您没有更改默认设置,则适用;否则根据您的编辑设置选择)