關於Xcode不能打印崩潰日志


最近在調試應用的時候發現了一個問題, 就是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];

總結

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

2. 還一種崩潰的情況是 EXC_BAD_ACCESS 當遇到這種錯誤, 控制一般不會給你很多關於崩潰的信息, 這種崩潰你只能使用下面這個調試方法, 不過記住你在正式發布的時候記得把這個勾取消, 不然會造成一些嚴重的問題(所有對象都不會被release,內存會一直漲).

轉自:南望青天的文章

補充:我的項目之所以無法打印錯誤日志是因為使用了bugly崩潰日志管理SDK. bugly中有一個方法:

  • 日志輸出控制

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

  - (void)enableLog:(BOOL)enabled;
當此項設置為 NO時,工程中很多crash將沒有提示信息,默認關閉.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM