關於Xcode不能打印崩潰日誌

最近在調試應用的時候發現了一個問題, 就是Xcode的控制檯不打印Crash日誌. 幾經周折終於發現了問題.c++

由於不能打印日誌, 開始覺得是我沒有設置 NSSetUncaughtExceptionHandler 這個崩潰日誌方法因而乎在appDelegate.m添加以下代碼:服務器



void uncaughtExceptionHandler(NSException *exception) { NSLog(@"CRASH: %@", exception); NSLog(@"Stack Trace: %@", [exception callStackSymbols]); // Internal error reporting } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); // Normal launch stuff }

結果仍是同樣控制檯仍是隻打印了這句話的錯誤信息: libc++abi.dylib: terminate_handler unexpectedly threw an exception 仍是與事無補.app

因而繼續尋找緣由, 最終在每行代碼塊都註釋的方式來排除問題,最終鎖定了問題, 由於我引用了AvosCloud的後臺SDK, 它默認開啓了將崩潰日誌上傳的功能, 可是他沒有打印本地的崩潰日誌, 最後一段代碼解決了這個問題.ui

[AVAnalytics setCrashReportEnabled:NO];spa

這裏不得不得吐槽一下官方的教程, 換了類名可是教程仍是沒有及時更改, 害我找這個方法找了10分鐘.
[AVOSCloudCrashReporting enable];調試

總結

通常Xcode不輸出Crash日誌有一下幾個可能:
1. NSSetUncaughtExceptionHandler() 可能被重寫了, 你調用以前它以後,(好比你引用了一些第三方庫, 它的SDK裏面可能包含了把Crash的日誌上傳到服務器, 這樣這個日誌可能被重寫了, 就不打印本地的崩潰信息了) 儘可能把它放在didFinishLaunchingWithOptions 最後面的一行代碼塊裏.日誌

2. 還一種崩潰的狀況是 EXC_BAD_ACCESS 當遇到這種錯誤, 控制通常不會給你不少關於崩潰的信息, 這種崩潰你只能使用下面這個調試方法, 不過記住你在正式發佈的時候記得把這個勾取消, 否則會形成一些嚴重的問題(全部對象都不會被release,內存會一直漲).code

轉自:南望青天的文章orm

補充:個人項目之因此沒法打印錯誤日誌是由於使用了bugly崩潰日誌管理SDK. bugly中有一個方法:對象

  • 日誌輸出控制

    開啓/關閉 Bugly日誌輸出,默認關閉。建議release 時關閉

  - (void)enableLog:(BOOL)enabled;
當此項設置爲 NO時,工程中不少crash將沒有提示信息,默認關閉.
相關文章
相關標籤/搜索