是什么导致我的WP7应用程序崩溃?

Ste*_*ham 2 silverlight exception-handling windows-phone-7

我在模拟器和手机本身都发生了一些无法解释的崩溃事件.基本上当我的应用程序崩溃时,我没有任何对话框,手机返回到主屏幕.

我有以下代码来显示MessageBox,但这是以某种方式绕过...

// Code to execute if a navigation fails
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
    MessageBox.Show(e.Exception.ToString());
}

// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
    MessageBox.Show(e.ExceptionObject.ToString());
}
Run Code Online (Sandbox Code Playgroud)

我想到它可能与记忆有关,因为我的应用处理了很多图像.但我认为仍然会被我上面未处理的异常代码捕获.关于我应该如何追踪这一点的任何想法将不胜感激.

Jon*_*eet 5

发生在我身上的一些事情:

  • 如果您正在其他线程上执行操作,那么这些线程上的IIRC异常将导致应用程序终止.您可能希望将新线程代码包装在异常处理程序中,该异常处理程序将异常传播到UI线程
  • 如果您的应用在加载第一个页面之前抛出异常,则可能导致应用程序在没有调用适当的处理程序的情况下死亡
  • 如果你有一个StackOverflowException,那就无法抓住,只会让应用炸弹

您可能希望添加一些仅调试构建的持久性日志记录(在应用程序本身中加载和显示),以便更容易计算出崩溃前应用程序的上一次运行的程度.


Ren*_*lte 5

密切关注您的内存使用情况.OutOfMemoryException在不调用Application_UnhandledException处理程序的情况下崩溃您的应用程序.您可以使用一些内置方法检查当前内存使用情况.我刚刚在博客上发表过这篇文章http://kodierer.blogspot.com/2010/09/windows-phone-memory-constraints.html

这是您应该添加的基本代码:

var timer = new DispatcherTimer {Interval = TimeSpan.FromSeconds(2)};
timer.Tick += (s, e) =>
{
   var memuse = (long)DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage");
   var maxmem = (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory");
   memuse /= 1024 * 1024;
   maxmem /= 1024 * 1024;
   MyTextBlock.Text = String.Format("Mem usage: {0} / {1} MB", memuse, maxmem);
};
timer.Start();
Run Code Online (Sandbox Code Playgroud)