Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为转换后的Windows应用商店UWP应用程序获取崩溃转储(或任何可用的崩溃报告)?_Uwp_Windows Store Apps_Windows Store_Desktop Bridge - Fatal编程技术网

如何为转换后的Windows应用商店UWP应用程序获取崩溃转储(或任何可用的崩溃报告)?

如何为转换后的Windows应用商店UWP应用程序获取崩溃转储(或任何可用的崩溃报告)?,uwp,windows-store-apps,windows-store,desktop-bridge,Uwp,Windows Store Apps,Windows Store,Desktop Bridge,我向Windows 10应用商店提交了我的nativeWin32应用程序,该应用程序使用Project Centennialconverter。该应用程序通过了商店认证,可通过私人链接使用(我正在测试它) 在运行我的测试时,应用程序挂起并崩溃了一次。因此,我试图检索任何可用的崩溃转储来诊断问题 我登录到,然后转到我的仪表板,果然应用程序显示了一次崩溃: 然后我点击了它。新的Health页面显示了崩溃发生的时间、市场等信息(这些信息对我调试问题没有帮助) 然后在底部我看到: 我点击了蓝色链接,

我向Windows 10应用商店提交了我的
native
Win32应用程序,该应用程序使用
Project Centennial
converter。该应用程序通过了商店认证,可通过私人链接使用(我正在测试它)

在运行我的测试时,应用程序挂起并崩溃了一次。因此,我试图检索任何可用的崩溃转储来诊断问题

我登录到,然后转到我的
仪表板
,果然应用程序显示了一次崩溃:

然后我点击了它。新的
Health
页面显示了崩溃发生的时间、市场等信息(这些信息对我调试问题没有帮助)

然后在底部我看到:

我点击了蓝色链接,上面写着
MOAPPLICATION\u HANG\u
,它打开了
故障详细信息
窗口。然后,如果我一直向下滚动(点击图的过去日期和时间),我会看到:

嗯。堆栈跟踪并不是我所期望的,但我会看一看

因此,如果我单击
堆栈跟踪
,就会出现以下弹出窗口:

然后,如果我点击下载,我会得到一个很小的文本文件
stackTrace.tsv
(117字节),里面有这样的内容:


< >有没有办法检索一个函数,我可以在VisualStudioC++项目中使用它来分析这个崩溃,它使用<代码>本地< /代码>调试器?

< p>您可以尝试使用此方法创建转储文件。

  • 在Visual Studio中调试进程时,当调试器在异常或断点处停止时,可以保存转储文件。选择另存为,调试。在“将转储另存为”对话框中的“另存为类型”列表中,可以选择“小型转储”或“小型转储与堆”(默认设置)
  • 使用,可以将调试器附加到在调试器外部运行的崩溃进程,然后保存转储文件。看
  • 另一种方法。 更多详细信息,请参阅
  • 希望这对您有所帮助。

    编辑:我想指出,以下内容在更新的Windows应用商店中似乎不再有效。现在,如果进入应用程序->分析->健康,崩溃可能看起来是这样的:

    然后,微软提供了一个小贴士:

    它们都没有像以前那样给我提供任何有用的信息来定位崩溃(见下文),我显然不想像上面建议的那样,在我的应用程序中附带
    .pdb
    文件或符号

    所以如果有人找到一个有效的解决方案,我很想知道


    你知道,我可能应该赞扬微软从UWP应用程序崩溃中实际实现了堆栈跟踪收集。我得到了我的Windows应用商店Win32/UWP应用程序中的实际崩溃,下面是我如何利用它来发现潜在的bug

    首先,当您登录到应用程序时,检查应用程序列表,查看是否有任何崩溃:

    如果是这样,请单击该号码/链接,并向下滚动至详细说明故障的位置。在我的例子中,这是一次看起来像这样的碰撞:

    单击它,将弹出另一个窗口。向下滚动至故障日志:

    它将向您显示崩溃发生的时间、应用程序的版本、发生崩溃的设备(非常好!),然后提供堆栈跟踪链接。所以点击它:

    这就是崩溃时我的实际堆栈跟踪的样子。因为那个人的计算机没有我的可执行文件中的符号(
    .pdb
    文件),所以我的应用程序中的所有方法都显示为空白偏移量

    以下是如何找到崩溃的实际位置:

    使用崩溃文件的精确副本还原Visual Studio解决方案。(我假设您将解决方案的
    版本
    版本与
    .exe
    .pdb
    文件一起存档,然后再将其上载到Windows应用商店。)

    启动Visual Studio,打开崩溃应用程序的版本,切换到
    Release
    配置和。(这一部分很重要,因为否则Visual Studio将在开始调试项目之前尝试构建项目,这可能会打乱从堆栈跟踪中获得的函数偏移!)

    然后在第一个构造函数中的某个地方放置一个断点,该构造函数将立即随应用程序加载。您需要确保它在崩溃之前触发

    开始调试(点击
    F5
    )并等待断点点击。然后显示
    Modules
    窗格(
    Ctrl
    +
    Alt
    +
    U
    ),找到可执行文件并获取其基本地址:

    在我的例子中,它是
    0xD0000
    。然后切换到反汇编(
    Alt
    +
    8
    ),并在反汇编窗口顶部的
    地址
    栏中键入上面堆栈跟踪的基址+崩溃偏移量。我的情况是:

    0xD0000+0x1D500
    

    然后点击
    输入
    ,以显示代码中的位置。这会告诉你坠机地点。就我而言,这是一行:

    那么这一切都取决于你的调试技巧。在我的例子中,很容易看到--
    nRow
    索引超出了范围。所以修复这个bug非常简单

    再次感谢微软提供了这样一个功能。我没有注意到上面显示的bug,如果我只是在一个简单的最终用户报告之后就试图发现什么会使应用程序崩溃,我会感到很难过


    最后,我认为在我的第一个示例中没有收集堆栈跟踪的原因是因为应用程序挂起了。因此,在这种情况下,可能不会收集调试信息。(这只是一个猜测。)

    @CheeryBu:好吧,如果我在那台机器上运行调试器,我就不需要保存了