如何调试在调试中运行良好的WP7应用程序,否则会崩溃?

时间:2012-05-11 09:21:38

标签: windows-phone-7

我的Windows Phone应用程序出现问题。

该应用程序使用所有设备传感器:gps,加速度计和指南针

当我在模拟器中运行它时很好,当我在手机上调试它时没关系。

但是,当我从设备上拔下USB线并再次启动应用程序时,它很快崩溃,我不知道如何找出原因,因为没有连接调试器。

如何调试此类问题?

4 个答案:

答案 0 :(得分:2)

出现这种情况有很多原因。如果没有一些调试输出,很难确切地指出发生了什么,但这里是对可能的罪魁祸首的简要说明:

最可能......

导致应用程序在非调试模式下崩溃的最可能原因是启动时间很短。我怀疑你可能会遇到this S.O. question的全部内容。附加调试器后,运行时会绕过操作系统杀死任何需要超过10秒的应用程序的功能。这是一个很容易测试的东西,只需删除应用程序启动时正在执行的所有代码(我假设你当时正在接触GPS的东西,只是评论那些东西)。

但另外......

虽然以上措施可以解决您的问题,但您必须警惕您可能遇到的其他一些问题:

当您访问GPS /加速度计/指南针时,必须先检查以确定这些传感器是否实际可由手机访问和提供。并非所有的Windows手机都需要提供指南针。看看Hardware Specifications for Windows Phone。如果您尝试访问指南针,并且您的设备不支持指南针,那么那可能就是您的问题。有关此here的更多详细信息。以下代码是您如何检查设备上指南针是否存在的示例(请注意,即使您的设备已关闭指南针,IsSupported也将返回true)。

using Microsoft.Device.Sensors;

public partial class MainPage : PhoneApplicationPage
{
    Compass compass;

    public MainPage()
    {
        if (Compass.IsSupported)
        {
            // awesome. you have a compass
        }
        else
        {
            // uh oh… you have a crappy phone, no compass for you :(
        }
    }
}

你有没有试过再打开它?

您必须考虑的其他事项之一是您使用的设备已关闭GPS(开发人员比您确定的更多,我犯了更多愚蠢的错误)。如果您的GPS已关闭或已禁用,或者用户(您,在那里,拿着设备)未授权该应用使用GPS数据。请参阅this article单独处理位置注意事项(如果您正在开发支持GPS的WP7应用程序,则必须阅读)。

声明你的意图先生

最后,如果您未在application manifest file中声明要从设备访问的内容,则可能会出现问题。基本上,如果您不将这些声明为应用程序使用的项目,则可能会遇到问题。您需要声明应用程序使用的原因是,Microsoft可以适当地过滤/警告/通知正在从您的应用程序运行所需信息的市场下载应用程序的用户。

省电模式

当Windows Phone位于battery saver mode时,某些传感器将关闭以节省电池寿命(例如...... GPS,指南针和加速计)。如果您的设备在插入开发机器时实际上没有充电,则很容易发生这种情况。

摘要:

  • 检查您的应用的加载时间是否超过10秒
  • 确保设备实际支持您尝试访问的传感器
  • 确保传感器返回的数据不会导致代码崩溃(例如GPS可能已打开,但根据您的代码错误提供一个lat / long,导致它崩溃)。
  • 确保在应用程序清单文件中声明用法
  • 确保您的传感器已开启并且您未处于节电模式

希望以上一个或全部可以帮助您诊断问题。 Lemme知道如果你发现它是别的东西,会很想知道还有什么可能导致这个问题。

答案 1 :(得分:0)

您是否考虑过在任何可能需要显示特定异常消息甚至堆栈跟踪的异常处理代码中添加MessageBox.Show方法调用?还要考虑对App.xaml.cs中的Application_UnhandledException事件处理程序执行相同的操作。

答案 2 :(得分:0)

您可以做的是将所有调试信息(如Stacktrace和Message)写入IsolatedStorage,然后您可以在单独的页面上显示。

可能会出现问题,因为如果插入电话,手机会使用PC的互联网(很长时间内会出现同样的问题)

答案 3 :(得分:0)

值得使用Andy Pennell在其博客here中描述的Little Watson技术。这会将异常详细信息保存到Isolated Storage,并在应用程序下次启动时通过应用程序将其发送出去。博客中有完整的代码。

如果您想要删除电子邮件部分并且只想从开发PC中手动从隔离存储中提取崩溃详细信息,则代码很容易适应。