• 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解决方案

  • 相关阅读:
    做了个上传下载任意文件到数据库
    owc 的使用技巧
    设计模式
    WCF 附录 高级主题 系列文章
    .NET 3.5 中WCF客户端代理性能改进以及最佳实践
    WCF 的几个问题
    你了解 Assembly.Load 吗?
    WCF 第十三章 可编程站点 系列文章
    WCF 第十二章 对等网 系列文章
    最佳实践:显式打开共享访问的WCF客户端代理
  • 原文地址:https://www.cnblogs.com/fifa0329/p/4536665.html
Copyright © 2020-2023  润新知