關(guān)于Xcode不能打印崩潰日志

最近在調(diào)試應(yīng)用的時(shí)候發(fā)現(xiàn)了一個(gè)問題, 就是Xcode的控制臺(tái)不打印Crash日志. 幾經(jīng)周折終于發(fā)現(xiàn)了問題.

因?yàn)椴荒艽蛴∪罩? 開始以為是我沒有設(shè)置 NSSetUncaughtExceptionHandler 這個(gè)崩潰日志方法于是乎在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
}

結(jié)果還是一樣控制臺(tái)還是只打印了這句話的錯(cuò)誤信息: libc++abi.dylib: terminate_handler unexpectedly threw an exception 還是與事無補(bǔ).

于是繼續(xù)尋找原因, 最終在每行代碼塊都注釋的方式來排除問題,最終鎖定了問題, 因?yàn)槲乙昧薃vosCloud的后臺(tái)SDK, 它默認(rèn)開啟了將崩潰日志上傳的功能, 但是他沒有打印本地的崩潰日志, 最后一段代碼解決了這個(gè)問題.

[AVAnalytics setCrashReportEnabled:NO];

這里不得不得吐槽一下官方的教程, 換了類名但是教程還是沒有及時(shí)更改, 害我找這個(gè)方法找了10分鐘.
[AVOSCloudCrashReporting enable];

總結(jié)

一般Xcode不輸出Crash日志有一下幾個(gè)可能:
1. NSSetUncaughtExceptionHandler() 可能被重寫了, 你調(diào)用之前它之后,(比如你引用了一些第三方庫, 它的SDK里面可能包含了把Crash的日志上傳到服務(wù)器, 這樣這個(gè)日志可能被重寫了, 就不打印本地的崩潰信息了) 盡量把它放在didFinishLaunchingWithOptions 最后面的一行代碼塊里.

2. 還一種崩潰的情況是 EXC_BAD_ACCESS 當(dāng)遇到這種錯(cuò)誤, 控制一般不會(huì)給你很多關(guān)于崩潰的信息, 這種崩潰你只能使用下面這個(gè)調(diào)試方法, 不過記住你在正式發(fā)布的時(shí)候記得把這個(gè)勾取消, 不然會(huì)造成一些嚴(yán)重的問題.

屏幕快照 2015-08-01 下午9.25.44.png

參考來源 StackOverFlow

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容