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

时间:2010-11-21 17:33:05

标签: 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());
}

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

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分: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();

答案 2 :(得分:1)

我的应用程序以完全相同的方式崩溃。

我将其跟踪到在DispatcherTimer tick处理程序中抛出OutOfMemoryException,尽管问题可能也发生在其他地方。

但是,OutOfMemoryException总是会占用您的程序。它不是。我在各种其他处理程序中尝试过它,它被正确捕获。

我发布了a blog entry about lost exceptions here

答案 3 :(得分:0)

你的应用程序可能因为长时间无响应而受到监视吗?也许是由于大量图像的加载时间以及此代码在UI线程上执行。