我使用native
转换器向Windows 10存储了我的Project Centennial
Win32应用converted to UWP app。该应用程序通过了商店认证,可以通过私人链接获得(我正在测试它。)
在运行测试时,应用程序挂断并崩溃一次。所以我试图检索任何可用的崩溃转储来诊断问题。
我已登录Windows Dev account,然后转到我的Dashboard
,确定应用程序显示一次崩溃:
Health
页面显示了崩溃发生的时间,市场等等。(无法帮我调试问题的东西。)
然后在底部我看到了这个:
我点击了MOAPPLICATION_HANG_
所在的蓝色链接,然后打开了Failure details
窗口。然后,如果我一直向下滚动(命中图的过去日期和时间),我会看到:
行。堆栈跟踪并不完全符合我的预期,但我会看看。
因此,如果我点击stack trace
,我会弹出这个:
然后,如果我点击下载,我会得到一个小文本文件stackTrace.tsv
(117个字节),其中包含了这个文字:
有没有办法检索我可以在Visual Studio C ++项目中使用的函数mini-dump .dmp
file来使用native
调试器分析此崩溃?
答案 0 :(得分:3)
编辑: 我想指出以下内容似乎不再适用于更新的Windows应用商店。现在,如果有人去App - >分析 - >崩溃的健康状况可能如此:
然后Microsoft提供了这个小小的消息:
这些都没有给我任何有用的信息来找到崩溃,就像之前一样(见下文)。我显然不想发送带有.pdb
文件或符号的应用程序,就像上面建议的那样。
因此,如果有人找到可行的解决方案,我有兴趣知道它......
你知道,我应该赞扬微软从UWP应用程序崩溃中实际实现堆栈跟踪集合。我得到了我的Windows Store Win32 / UWP应用程序中的实际崩溃,以及我如何利用它来查找潜在错误。
首先,当您登录dashboard时,请检查应用列表,看看是否有任何崩溃:
如果是这样,请点击该号码/链接,然后一直向下滚动到详细信息Failures
。在我的情况下,这是一个看起来像这样的崩溃:
点击它,这将打开另一个窗口。向下滚动到Failure Log
:
它将显示崩溃发生的时间,应用程序的版本,它发生的设备(非常好!)然后有一个堆栈跟踪链接。所以点击它:
这就是崩溃时我的实际堆栈跟踪的样子。由于该人的计算机没有带有我的可执行文件的符号(.pdb
文件),我的应用程序中的所有方法都显示为空白偏移量。
以下是如何找到崩溃的实际位置:
使用已崩溃文件的精确副本还原Visual Studio解决方案。 (我假设您已将解决方案的release
版本与.exe
和.pdb
文件一起归档,然后再将其上传到Windows应用商店。)
启动Visual Studio,打开已崩溃应用的版本,切换到Release
配置和disable builds。 (这部分很重要,因为否则Visual Studio会在你开始调试之前尝试构建你的项目,这可能会搞乱你从堆栈跟踪中获得的函数偏移!)
然后在第一个构造函数中的某个位置放置一个断点,该构造函数将立即加载您的应用程序。您需要确保在崩溃之前触发它。
开始调试(点击F5
)并等待断点命中。然后显示Modules
窗格(Ctrl
+ Alt
+ U
)并找到您的可执行文件并获取其基地址:
就我而言,它是0xD0000
。然后切换到反汇编(Alt
+ 8
)并在反汇编窗口顶部的Address
栏中输入上面堆栈跟踪的基址+崩溃偏移量。我的情况是:
0xD0000+0x1D500
并点击Enter
以显示代码中的位置。这将显示崩溃发生的位置。就我而言,就是这一行:
然后一切都取决于你的调试技巧。在我的例子中,很容易看出 - nRow
索引超出范围。因此修复此错误非常简单。
同样,我想对微软提供这样的功能表示感谢。我不知道上面显示的错误,如果我试图发现在一个简单的最终用户报告之后崩溃应用程序,我会很难受。
PS。最后,我认为我的第一个示例中没有收集堆栈跟踪的原因是因为应用程序已挂起。因此,在这种情况下,可能不会收集调试信息。 (只是猜测一下。)
答案 1 :(得分:-3)
您可以尝试使用此方法创建转储文件。
希望这可能对您有所帮助。