windows phone中,将crash report记录下来,写入文件,方便分析

APP出现crash(崩溃)总是不能忍的

当我们连接调试器调试的时候,发现每当APP崩溃的时候

程序都会走到App.xaml.cs中的

       // Code to execute on Unhandled Exceptions
        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // An unhandled exception has occurred; break into the debugger
                System.Diagnostics.Debugger.Break();
            }

        }
然而,我们并不是时时刻刻保持连接在电脑的调试器上的

因此,有必要将造成crash的信息,尽量的保存下来

可以采用写入LOG的方式

ApplicationUnhandledExceptionEventArgs 类

ApplicationUnhandledExceptionEventArgs.ExceptionObject 属性,是关键

public Exception ExceptionObject { get; set; }
因此,记录下对你有用的信息吧!

        // 摘要:
        //     初始化 System.Exception 类的新实例。
        public Exception();
        //
        // 摘要:
        //     使用指定的错误消息初始化 System.Exception 类的新实例。
        //
        // 参数:
        //   message:
        //     描述错误的消息。
        public Exception(string message);
        //
        // 摘要:
        //     使用指定的错误消息和对导致此异常的内部异常的引用来初始化 System.Exception 类的新实例。
        //
        // 参数:
        //   message:
        //     解释异常原因的错误消息。
        //
        //   innerException:
        //     导致当前异常的异常;如果未指定内部异常,则是一个空引用(在 Visual Basic 中为 Nothing)。
        public Exception(string message, Exception innerException);

        // 摘要:
        //     获取一个提供用户定义的其他异常信息的键/值对的集合。
        //
        // 返回结果:
        //     一个对象,它实现 System.Collections.IDictionary 接口并包含用户定义的键/值对的集合。默认值为空集合。
        public virtual IDictionary Data { get; }
        //
        // 摘要:
        //     获取或设置指向此异常所关联帮助文件的链接。
        //
        // 返回结果:
        //     统一资源名称 (URN) 或统一资源定位器 (URL)。
        public virtual string HelpLink { get; set; }
        //
        // 摘要:
        //     获取或设置 HRESULT(一个分配给特定异常的编码数字值)。
        //
        // 返回结果:
        //     HRESULT 值。
        public int HResult { get; protected set; }
        //
        // 摘要:
        //     获取导致当前异常的 System.Exception 实例。
        //
        // 返回结果:
        //     一个 Exception 实例,描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值,或者,如果没有向构造函数提供内部异常值,则返回空引用(在
        //     Visual Basic 中为 Nothing)。此属性为只读。
        public Exception InnerException { get; }
        //
        // 摘要:
        //     获取描述当前异常的消息。
        //
        // 返回结果:
        //     解释异常原因的错误消息或空字符串 ("")。
        public virtual string Message { get; }
        //
        // 摘要:
        //     [安全关键] 获取或设置导致错误的应用程序或对象的名称。
        //
        // 返回结果:
        //     导致错误的应用程序或对象的名称。
        public virtual string Source { get; set; }
        //
        // 摘要:
        //     获取在引发当前异常时调用堆栈上帧的字符串表示形式。
        //
        // 返回结果:
        //     一个字符串,它描述调用堆栈的内容,其中首先显示最近的方法调用。
        public virtual string StackTrace { get; }

        // 摘要:
        //     当在派生类中重写时,返回 System.Exception,它是一个或多个后续异常的根源。
        //
        // 返回结果:
        //     异常链中第一个被引发的异常。如果当前异常的 System.Exception.InnerException 属性是空引用(在 Visual Basic
        //     中为 Nothing),则此属性返回当前异常。
        public virtual Exception GetBaseException();
        //
        // 摘要:
        //     获取当前实例的运行时类型。
        //
        // 返回结果:
        //     一个 System.Type 对象,表示当前实例的确切运行时类型。
        public Type GetType();
        //
        // 摘要:
        //     创建并返回当前异常的字符串表示形式。
        //
        // 返回结果:
        //     当前异常的字符串表示形式。
        [SecuritySafeCritical]
        public override string ToString();

我一般是这样:

        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                // An unhandled exception has occurred; break into the debugger
                System.Diagnostics.Debugger.Break();
            }
            Logger.WriteLog("Application_UnhandledException object:" + sender.ToString());
            Logger.WriteLog("Application_UnhandledException e.ExceptionObject.Message:" + e.ExceptionObject.Message);
            Logger.WriteLog("Application_UnhandledException e.ExceptionObject.Source:" + e.ExceptionObject.Source);
            Logger.WriteLog("Application_UnhandledException e.ExceptionObject.StackTrace:" + e.ExceptionObject.StackTrace);

        }

最后提一点:

国外的一个网站,https://www.bugsense.com

针对各个移动平台

提供了很好的BUG REPORT解决方案

你可能感兴趣的:(windows phone)