Windows 10 Crash Whodunit

Jor*_*mar 12 c# windows crash windows-10 uwp

我在商店里有一个应用程序让我头疼.我的客户报告并验证了应用程序在以下情况下崩溃/关闭:

  • 启动应用程序
  • 关闭应用程序
  • 等待至少约15分钟
  • 打开应用程序

当启动画面结束并启动扩展的启动画面时,应用程序将关闭.目前还不清楚是什么导致了这个问题.该应用程序将继续关闭/崩溃.在重新开始工作之前,必须完全卸载并重新安装该应用.我只能用应用程序的商店版本重现此问题.我在事件查看器程序中找不到任何崩溃报告.

我已经从开发门户网站下载了一些崩溃报告,但我认为我没有看到根据崩溃的时间戳和频率显示崩溃.

额外信息:我没有运行任何后台任务或平铺更新.

我有三个子问题:

  1. 在系统中寻找有关应用程序关闭原因的更多信息有哪些好处?
  2. 我可以在我的系统上运行商店构建,这样我就可以运行一些测试而无需每次都将应用程序提交到商店吗?
  3. 基于以下事实:1)应用程序第一次运行2)在约15分钟内启动后运行任何后续时间或上一次启动时3)在上次启动> 15分钟前运行它时自动关闭4)仅发生在商店构建中,有没有人有任何想法可能导致这个?

更新:

我尝试使用Visual Studio调试应用程序的商店版本,我只能看到以下内容:

Exception thrown at 0x00007FFF54D7A1C8 (KernelBase.dll) in App.exe: 0x40080201: WinRT originate error (parameters: 0x000000008000000E, 0x000000000000002C, 0x0000006E46EAE9B0).
Exception thrown at 0x00007FFF54D7A1C8 (KernelBase.dll) in App.exe: 0x40080201: WinRT originate error (parameters: 0x000000008000000E, 0x0000000000000046, 0x0000006E46EAE630).
The thread 0x1be8 has exited with code 1 (0x1).
The thread 0xfa8 has exited with code 1 (0x1).
The thread 0x115c has exited with code 1 (0x1).
The thread 0x730 has exited with code 1 (0x1).
The thread 0xed4 has exited with code 1 (0x1).
The thread 0x1894 has exited with code 1 (0x1).
The thread 0x18a0 has exited with code 1 (0x1).
The thread 0x194c has exited with code 1 (0x1).
The thread 0x1a3c has exited with code 1 (0x1).
The thread 0x1988 has exited with code 1 (0x1).
The thread 0x16ec has exited with code 1 (0x1).
The thread 0x1584 has exited with code 1 (0x1).
The thread 0xfd0 has exited with code 1 (0x1).
The thread 0xd8c has exited with code 1 (0x1).
The thread 0xcec has exited with code 1 (0x1).
The thread 0x16b4 has exited with code 1 (0x1).
The thread 0x12f8 has exited with code 1 (0x1).
The thread 0x146c has exited with code 1 (0x1).
The thread 0x36c has exited with code 1 (0x1).
The thread 0x1854 has exited with code 1 (0x1).
The thread 0x1ae4 has exited with code 1 (0x1).
The thread 0xa38 has exited with code 1 (0x1).
The thread 0x230 has exited with code 1 (0x1).
The program '[3840] App.exe' has exited with code 1 (0x1).
Run Code Online (Sandbox Code Playgroud)

我想程序通常会以代码0退出,所以一定是错的.很难看出抛出的异常是什么.

我试图打破异常并跳过去查看导致它的原因但我得到的只是另一个例外:

Exception thrown at 0x00007FFF54D7A1C8 in App.exe: Microsoft C++ exception: _com_error at memory location 0x000000EE2788E9D0.
Run Code Online (Sandbox Code Playgroud)

我上传了一个版本的应用程序到内置的复活节彩蛋,允许我禁用扩展启动画面中的所有代码.即使所有代码禁用它仍然崩溃/关闭.

更新2:应用程序在启动时开始关闭的时间范围似乎与系统休眠/休眠所需的时间有关.

Jus*_* XL 11

我想这可能与应用程序的生命周期有关.

在您的应用程序被用户暂停后,由于资源限制,操作系统可能会终止该应用程序.发生这种情况时,您应用中的先前会话数据将会丢失.因此,如果您没有任何检查来恢复数据,并且您的应用程序启动依赖于此数据,则应用程序将崩溃并为您提供示例NullReferenceException.

调试此方法的一种方法是使用Visual Studio的Lifecycle Events调试器.要激活它,您需要运行您的应用程序,然后在任务栏中打开Lifecycle Events(参见下图)并选择Suspend and shutdown.请注意,这将导致应用关闭.现在用Visual Studio重新启动应用程序,这次它是从Terminated模式启动的.

在此输入图像描述

通常,您将看到以下代码片段App.xaml.cs.这是恢复以前的应用状态的好地方.可以在这里找到一个很好的参考(注意它适用于Windows 8商店应用程序,但它与UWP中的概念相同).

if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
    //TODO: Load state from previously suspended application
}
Run Code Online (Sandbox Code Playgroud)

此外,我强烈建议您将例外写入日志文件并将其存储到服务器,或礼貌地要求用户通过电子邮件发送给您.由于崩溃发生在应用程序的前台,您将能够捕获它 -

public App()
{
    this.UnhandledException += (s, e) => { };
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,祝你好运!


Jor*_*mar 6

事实证明这是一个时间问题.代码在恢复代码中做了一些不好的事情(将类型转换为错误类型).它在调试版本中没有出现的原因是因为获取恢复代码的速度较慢.到达该代码时,不会发生此类型的转换错误.它确实发生在商店构建中,但是HockeyApp或Windows事件查看器没有以某种方式获取非法投射异常.