关于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 当遇到这种错误, 控制一般不会给你很多关于崩溃的信息, 这种崩溃你只能使用下面这个调试方法, 不过记住你在正式发布的时候记得把这个勾取消, 不然会造成一些严重的问题.
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8