ios 無法看到崩潰日誌
最近在除錯應用的時候發現了一個問題, 就是Xcode的控制檯不列印Crash日誌. 幾經周折終於發現了問題.
因為不能列印日誌, 開始以為是我沒有設定 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
於是繼續尋找原因, 最終在每行程式碼塊都註釋的方式來排除問題,最終鎖定了問題, 因為我引用了AvosCloud的後臺SDK, 它預設開啟了將崩潰日誌上傳的功能, 但是他沒有列印本地的崩潰日誌, 最後一段程式碼解決了這個問題.
[AVAnalytics setCrashReportEnabled:NO];
這裡不得不得吐槽一下官方的教程, 換了類名但是教程還是沒有及時更改, 害我找這個方法找了10分鐘.[AVOSCloudCrashReporting enable];
還有比如友盟分析
[MobClicksetCrashReportEnabled:NO];
總結
一般Xcode不輸出Crash日誌有一下幾個可能:1. NSSetUncaughtExceptionHandler() 可能被重寫了, 你呼叫之前它之後,(比如你引用了一些第三方庫,
它的SDK裡面可能包含了把Crash的日誌上傳到伺服器, 這樣這個日誌可能被重寫了, 就不列印本地的崩潰資訊了) 儘量把它放在didFinishLaunchingWithOptions 最後面的一行程式碼塊裡.
2. 還一種崩潰的情況是 EXC_BAD_ACCESS 當遇到這種錯誤, 控制一般不會給你很多關於崩潰的資訊, 這種崩潰你只能使用下面這個除錯方法,
不過記住你在正式釋出的時候記得把這個勾取消, 不然會造成一些嚴重的問題.
因為選擇了zombie以後所有oc物件都不會唄釋放.
螢幕快照 2015-08-01 下午9.25.44.png