关于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


所属标签

无标签