android调用c闪退未看到log,解决:Android开发 看不到崩溃的日志
前言
應用當前界面崩潰停留在上個頁面,看不到崩潰日志
Android的logcat控制臺,看不到應用崩潰的日志?
如何攔截到未捕獲的異常,并打印出來,幫助我們快速定位到代碼問題呢?
最近同事跟我反應說開發的應用run的時候發生了崩潰,但是在logcat中,只看到了應用重啟的日志,類似下面這樣的:
追尋答案
那么怎樣查看錯誤日志,快速定位問題的原因呢?
1,由于崩潰的概率不會那么多,最開始的時候,純靠手速:
知道操作哪里會崩潰,先把logcat控制臺清下logcat控制臺日志,然后操作應用,快速Ctrl+Alt+A(QQ的截屏快捷鍵);呵呵這個考驗手速的方案,肯定不可取;
2,通過切換channel進程和dead進程查看錯誤日志,這個能看到一些日志,但是也不是很全面,不可取;
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
感謝
如果覺得本文對你有幫助,請收藏加關注,有任何疑問,可以私信交流或者評論,謝謝!
總結
以上是生活随笔為你收集整理的android调用c闪退未看到log,解决:Android开发 看不到崩溃的日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ora01075,操作系统时
- 下一篇: android wp8相机,体验提升明显