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中,将crash report记录下来,写入文件,方便分析的更多相关文章

  1. 【干货】查看windows文件系统中的数据—利用簇号查看文件与恢复文件

    前面我们使用这个软件发现了很多删除掉的数据,今天来看看簇.FAT文件系统中,存在一个簇的链接,我知道了簇1在哪里就可以顺藤摸瓜恢复所有的信息. 这里使用FAT 12为例子,FAT其他万变不离其宗,甚至 ...

  2. Windows系统中,循环运行.bat/.exe等文件

    一.创建循环运行的run-everySecond.vbs文件[双击次文件即可启动运行] dim a set a=CreateObject("Wscript.Shell") Do # ...

  3. C#中using的使用-以FileStream写入文件为例

    场景 CS中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...

  4. 将List<Map>中的datas转换为json格式写入文件

    private static boolean writeToTextFileByJson(List<Map<String, Object>> datas, String tit ...

  5. vim中 E212:无法打开并写入文件 的解决办法

    因为centos7刚安装的时候是无法上网的,所以,需要去配置一下ifcfg-ens33文件,但实际上这个文件是只读的文件,root也无法去更改内容,这时候保存的时候需要使用 w ! sudo tee ...

  6. Chrome的Crash Report服务

    <本文转自:http://www.cppblog.com/woaidongmao/archive/2009/10/22/99211.aspx> 本文翻译自debugInfo网站上一篇文章g ...

  7. Windows系统调用中的现场保存

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的现场保存 我们之前介绍过三环进零环的步骤 ...

  8. windows系统中的dll的作用详细解释

    什么是.DLL文件? DLL 是一个包含可由多个程序同时使用的代码和数据的库.例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数.因此,每个程序都可以使用该 D ...

  9. 浅谈Android Studio中项目结构中project模式的各个文件和文件夹

    致敬郭霖,这些知识是从第一行代码第二版中直接码下来的,谢谢他,注意每个条目前是否有. 1..gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件,我们无需关心 ...

随机推荐

  1. 利用autoit自动关闭指定标题窗口

     最近使用PL/SQL Developer 比较两个数据库数据差异,因部分表上没有主键,PL/SQL 就会弹出一个确认框提示某某表没有主键.因为有很多表没有主键,就不停的弹出确认窗口,得不停的点击 ...

  2. 记忆2--记忆的"记"和"忆"

    有时候也会想,我们是如何记住东西的?是如何想起来的?在写这篇文章的时候,想起初中的时候(应当是初二),语文老师检查唐诗背诵,在下面觉得已经能背起来的时候,去向老师背诵的时候,忘记了开头,干急想不起来, ...

  3. HTTP缓存 1.0 vs 1.1

    在“使用ETag跟踪用户”中有一点被忽略了,因为要用这张小图统计统计uv, 所以要求浏览器必须每次都要发送这个图片的请求.这需要服务器对图片的缓存策略做设置. http/1.0 和 http/1.1 ...

  4. VS快捷编码方式

    概念: 代码段是将预先定义好的可重用代码块快速插入到代码文件中,代码段提高了开发效率,增强了代码的可重用性:既节约了时间,又实现了不同开发人员间代码的共享.同时也可保证同一项目中代码风格的统一.   ...

  5. JUnit3 结合一个除法的单元测试说明Assert.fail()的用法

    之前一篇博文(JUnit基础及第一个单元测试实例(JUnit3.8))介绍了用JUnit做单元测试的基本方法,并写了一个简单的类Calculator,其中包含了整型加减乘除的简单算法. 本文通过完善其 ...

  6. Gradle Tips#1-tasks

    原文链接 以这篇博客開始,我将写一系列关于Gradle的文章,用来记录接触Gradle构建脚本以来我所理解的Gradle. 今天要讲的就是Gradle tasks以及task的配置和运行.可能有的读者 ...

  7. fatal error: malformed or corrupted AST file: &#39;Unable to load module &quot;/Users/apple/Library/Developer

    在同一时候安装使用Xcode5, Xcode6之后, 常常遇到这个问题. fatal error: malformed or corrupted AST file: 'Unable to load m ...

  8. 前端编辑神器Brackets

    介绍 Brackets 是Adobe发布的一款免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境.使用Node.js构建!官网:http://brackets.i ...

  9. js校验

    判空 function check(s) { return (s == null || typeof (s) == "undefined" || s == "" ...

  10. [spring入门学习笔记][spring的IoC原理]

    什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...