Windows 10 崩溃侦探
Windows 10 Crash Whodunit
我在商店中有一个应用程序让我有些头疼。我的客户报告说,我验证了应用程序 crashes/closes 在以下情况下:
- 启动应用程序
- 关闭应用程序
- 至少等待 15 分钟
- 打开应用程序
应用程序将在启动画面结束和扩展启动画面开始时立即关闭。目前还不清楚是什么导致了这个问题。该应用程序将保留 closing/crashing。该应用程序必须完全卸载并重新安装才能再次开始工作。我只能使用应用程序的商店版本重现此问题。我在事件查看器程序中没有找到任何崩溃报告。
我已经从开发门户网站下载了一些崩溃报告,但我认为根据崩溃的时间戳和频率我没有看到崩溃。
额外信息:我不会运行任何后台任务或磁贴更新。
我有三个子问题:
- 在系统中查找哪些位置可以更好地了解应用程序关闭的原因?
- 我是否可以 运行 在我的系统上构建一个商店,这样我就可以 运行 进行一些测试,而不必每次都将应用程序提交到商店?
- 基于以下事实:1) 应用程序 运行s 第一次 2) 运行s 在 ~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).
我想程序通常会以代码 0 退出,所以一定是出了什么问题。很难看出抛出的异常是什么。
我试图在异常处中断并跨过来看看是什么导致了它,但我得到的只是另一个异常:
Exception thrown at 0x00007FFF54D7A1C8 in App.exe: Microsoft C++ exception: _com_error at memory location 0x000000EE2788E9D0.
我将带有内置复活节彩蛋的应用程序版本上传到商店,允许我禁用扩展启动画面中的所有代码。即使所有代码都禁用它仍然 crashes/closes.
更新 2:
应用程序在启动时开始关闭的时间范围似乎与系统达到 hibernate/sleep 所需的时间有关。
这是 Windows8.1 商店应用重定向到 Windows 10 吗?
您可以使用事件查看器来检查有关应用程序崩溃或任何其他系统事件日志记录的详细信息。只需在 W10 中搜索事件查看器即可。
使用向导为商店生成应用程序包。由于 Windows 10 允许侧面加载应用程序,因此您可以使用侧面加载来安装和测试应用程序。开发者模式还支持侧载应用程序。您只需安装 .appx 及其证书即可进行旁加载。 https://msdn.microsoft.com/en-us/library/windows/apps/dn706236.aspx
你能分享更多你从日志记录中得到的细节吗?使用的能力是什么?还建议您使用 Application Insights 遥测来轻松调试/错误报告。
我想这可能与应用程序的生命周期有关。
您的应用程序被用户暂停后,由于资源限制,它可能会被 OS 终止。发生这种情况时,您应用中之前的会话数据将丢失。因此,如果您没有任何检查来恢复数据,并且如果您的应用程序启动依赖于此数据,则该应用程序将崩溃并给您例如 NullReferenceException
s.
调试它的一种方法是使用 Visual Studio 的 Lifecycle Events 调试器。要激活它,您需要 运行 您的应用,然后打开任务栏中的 Lifecycle Events(见下图)和 select 暂停和关闭。请注意,这将导致应用程序关闭。现在使用 Visual Studio 重新启动应用程序,这次它是从 Terminated 模式启动的。
通常您会在 App.xaml.cs
中看到以下代码。这是恢复您以前的应用程序状态的好地方。可以找到一个很好的参考 here(注意它适用于 Windows 8 个商店应用程序,但它在 UWP 中是相同的概念)。
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
此外,我强烈建议您将异常写入日志文件并将其存储到服务器,或者礼貌地请用户通过电子邮件将其发送给您。由于崩溃发生在应用程序的前台,您将能够在 -
中捕获它
public App()
{
this.UnhandledException += (s, e) => { };
希望这对您有所帮助,祝您好运!
原来是时间问题。代码在简历代码中做了一些不好的事情(将变量类型转换为错误的类型)。它没有出现在调试版本中的原因是因为获取恢复代码的速度较慢。当它到达该代码时,不会发生这种类型转换错误。它确实发生在商店构建中,但是非法转换异常没有被 HockeyApp 或 Windows 事件查看器以某种方式发现。
我在商店中有一个应用程序让我有些头疼。我的客户报告说,我验证了应用程序 crashes/closes 在以下情况下:
- 启动应用程序
- 关闭应用程序
- 至少等待 15 分钟
- 打开应用程序
应用程序将在启动画面结束和扩展启动画面开始时立即关闭。目前还不清楚是什么导致了这个问题。该应用程序将保留 closing/crashing。该应用程序必须完全卸载并重新安装才能再次开始工作。我只能使用应用程序的商店版本重现此问题。我在事件查看器程序中没有找到任何崩溃报告。
我已经从开发门户网站下载了一些崩溃报告,但我认为根据崩溃的时间戳和频率我没有看到崩溃。
额外信息:我不会运行任何后台任务或磁贴更新。
我有三个子问题:
- 在系统中查找哪些位置可以更好地了解应用程序关闭的原因?
- 我是否可以 运行 在我的系统上构建一个商店,这样我就可以 运行 进行一些测试,而不必每次都将应用程序提交到商店?
- 基于以下事实:1) 应用程序 运行s 第一次 2) 运行s 在 ~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).
我想程序通常会以代码 0 退出,所以一定是出了什么问题。很难看出抛出的异常是什么。
我试图在异常处中断并跨过来看看是什么导致了它,但我得到的只是另一个异常:
Exception thrown at 0x00007FFF54D7A1C8 in App.exe: Microsoft C++ exception: _com_error at memory location 0x000000EE2788E9D0.
我将带有内置复活节彩蛋的应用程序版本上传到商店,允许我禁用扩展启动画面中的所有代码。即使所有代码都禁用它仍然 crashes/closes.
更新 2: 应用程序在启动时开始关闭的时间范围似乎与系统达到 hibernate/sleep 所需的时间有关。
这是 Windows8.1 商店应用重定向到 Windows 10 吗?
您可以使用事件查看器来检查有关应用程序崩溃或任何其他系统事件日志记录的详细信息。只需在 W10 中搜索事件查看器即可。
使用向导为商店生成应用程序包。由于 Windows 10 允许侧面加载应用程序,因此您可以使用侧面加载来安装和测试应用程序。开发者模式还支持侧载应用程序。您只需安装 .appx 及其证书即可进行旁加载。 https://msdn.microsoft.com/en-us/library/windows/apps/dn706236.aspx
你能分享更多你从日志记录中得到的细节吗?使用的能力是什么?还建议您使用 Application Insights 遥测来轻松调试/错误报告。
我想这可能与应用程序的生命周期有关。
您的应用程序被用户暂停后,由于资源限制,它可能会被 OS 终止。发生这种情况时,您应用中之前的会话数据将丢失。因此,如果您没有任何检查来恢复数据,并且如果您的应用程序启动依赖于此数据,则该应用程序将崩溃并给您例如 NullReferenceException
s.
调试它的一种方法是使用 Visual Studio 的 Lifecycle Events 调试器。要激活它,您需要 运行 您的应用,然后打开任务栏中的 Lifecycle Events(见下图)和 select 暂停和关闭。请注意,这将导致应用程序关闭。现在使用 Visual Studio 重新启动应用程序,这次它是从 Terminated 模式启动的。
通常您会在 App.xaml.cs
中看到以下代码。这是恢复您以前的应用程序状态的好地方。可以找到一个很好的参考 here(注意它适用于 Windows 8 个商店应用程序,但它在 UWP 中是相同的概念)。
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
此外,我强烈建议您将异常写入日志文件并将其存储到服务器,或者礼貌地请用户通过电子邮件将其发送给您。由于崩溃发生在应用程序的前台,您将能够在 -
中捕获它public App()
{
this.UnhandledException += (s, e) => { };
希望这对您有所帮助,祝您好运!
原来是时间问题。代码在简历代码中做了一些不好的事情(将变量类型转换为错误的类型)。它没有出现在调试版本中的原因是因为获取恢复代码的速度较慢。当它到达该代码时,不会发生这种类型转换错误。它确实发生在商店构建中,但是非法转换异常没有被 HockeyApp 或 Windows 事件查看器以某种方式发现。