關于Xcode不能打印崩潰日志

關于Xcode的控制臺不打印Crash日志的問題。首先,我們需要設置uncaughtExceptionHandler,在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
}

如果此時還不行,則檢查一下是否有第三方庫有自動上傳crash的功能(特別是統計庫),這種庫可能會重寫這個方法。

如果此時問題依舊,則檢查一下Xcode的Schema配置,是否構選了Enable Zombie Objects。

總結起來,如果Xcode不輸出Crash日志有一下幾個可能:

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

  • 還一種崩潰的情況是 EXC_BAD_ACCESS 當遇到這種錯誤, 控制一般不會給你很多關于崩潰的信息, 這種崩潰你只能使用下面這個調試方法, 不過記住你在正式發布的時候記得把這個勾取消, 不然會造成一些嚴重的問題.

memorymanagerinios.png


所屬標簽

無標簽

25选5玩法中奖