解决:Android开发 看不到崩溃的日志

# 前言

应用当前界面崩溃停留在上个页面,看不到崩溃日志

Android的logcat控制台,看不到应用崩溃的日志?

如何拦截到未捕获的异常,并打印出来,帮助我们快速定位到代码问题呢?

最近同事跟我反应说开发的应用run的时候发生了崩溃,但是在logcat中,只看到了应用重启的日志,类似下面这样的:

![崩溃后看到重启的日志](https://oscimg.oschina.net/oscnet/8c0bfe48b5b63fd0aa89bd65c6080c3603e.jpg)

# 追寻答案

那么怎样查看错误日志,快速定位问题的原因呢?

1,由于崩溃的概率不会那么多,最开始的时候,纯靠手速:
知道操作哪里会崩溃,先把logcat控制台清下logcat控制台日志,然后操作应用,快速Ctrl+Alt+A(QQ的截屏快捷键);呵呵这个考验手速的方案,肯定不可取;

2,通过切换channel进程和dead进程查看错误日志,这个能看到一些日志,但是也不是很全面,不可取;

![查看channel和dead进程](https://oscimg.oschina.net/oscnet/80309f6cf2529045502794f0a676ad04105.jpg)

3,根据业务粗略定位产生问题的代码段,通过try catch包裹,通过debug跟踪代码一步步跟到问题所在;
这种适合代码逻辑清晰、简单地方,如果循环、接口回调、多线程等操作比较多,是很不易跟到具体问题的。

4,最好的方案是拦截到正常代码中未捕获的异常,然后能够单独打印出来,方便我们调试和查看。
接下来就看下如何去实现拦截未捕获的异常的。

# 确定方案

首先,我们要先了解一个UncaughtExceptionHandler,它能帮助我们捕获到全局的异常,
具体用法是Application的onCreate方法中调用

````

@Override

public void onCreate() {

super.onCreate();

    // 以下用来捕获程序崩溃异常

// 程序崩溃时触发线程

    Thread.setDefaultUncaughtExceptionHandler(new OwnUncaughtExceptionHandler());

}

````

其中OwnUncaughtExceptionHandler继承UncaughtExceptionHandler,并重写uncaughtException方法,

````

public class OwnUncaughtExceptionHandlerimplements Thread.UncaughtExceptionHandler {

@Override

    public void uncaughtException(Thread thread, Throwable ex) {

StackTraceElement[] elements = ex.getStackTrace();

        StringBuilder reason =new StringBuilder(ex.toString());

        if (elements !=null && elements.length >0) {

for (StackTraceElement element : elements) {

reason.append("\n");

                reason.append(element.toString());

            }

}

Log.e("zyq", reason.toString());

        android.os.Process.killProcess(android.os.Process.myPid());

    }

}

````

# 看到结果

然后保存再运行你的程序,就可以在logcat中看到程序崩溃相应的日志了,如果程序没有崩溃,你可以自己造个空指针异常试验下,
在logcat控制台可以看到:

注意:过滤日志的地方选择 No Filters

![控制台打印的日志](https://oscimg.oschina.net/oscnet/250c03e52d31fe2b2790c860dd8a511274c.jpg)

# 感谢

如果觉得本文对你有帮助,请收藏加关注,有任何疑问,可以私信交流或者评论,谢谢!

# 最后

祝所有人平安幸福、家庭和睦、身体健康。

愿世界和平,不再被战争所累。
 

有任何疑问,可以及时反馈给我;

如果你觉得还不错,请点赞o( ̄▽ ̄)d。

你可能感兴趣的:(解决:Android开发 看不到崩溃的日志)