美文网首页iOS
Xcode 不打印崩溃日志的问题

Xcode 不打印崩溃日志的问题

作者: Superman168 | 来源:发表于2018-09-19 19:58 被阅读212次

前言

这个月刚接手了一个新项目, 期初没怎么在意,后来在开发过程中慢慢发现了一些问题,其中就包括无法控制台不打印崩溃信息,这实在是有点蛋疼,给排查问题无疑添加了负担,只能查找哪里的问题了,找了几次一直没能解决,直到今天。

网上解决办法

没有设置 NSSetUncaughtExceptionHandler 这个崩溃日志方法于是乎在appDelegate.m添加如下代码:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

    return YES;
}

void uncaughtExceptionHandler(NSException*exception) {
    
//    NSLog(@"CRASH: %@", exception);
//    NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
    NSArray *stackArry= [exception callStackSymbols];
    NSString *reason = [exception reason];
    NSString *name = [exception name];
    NSString *exceptionInfo = [NSString stringWithFormat:@"Exception name:%@\nException reason:%@\nException stack :%@",name,reason,stackArry];
    
    NSLog(@"%@",exceptionInfo);
    // Internal error reporting
    
}

然并卵,丝毫没有改变什么!!

问题原因

继续寻找原因, 文章还有引用了AvosCloud的后台SDK, 它默认开启了将崩溃日志上传的功能, 但是他没有打印本地的崩溃日志, 最后一段代码解决了这个问题.这是其他人遇到的问题:

[AVAnalytics setCrashReportEnabled:NO];

还有比如友盟分析

[MobClick setCrashReportEnabled:NO];

  • 真实的原因
    网上的文章给了我一些启发,大概就是第三方类库的原因,看了看发现项目中集成的 腾讯分析,
/**
 是否启用崩溃报告,需要在 MTA 启动函数之前调用。默认启动
 */
@property (nonatomic, assign) BOOL enableCrashReport;

果断设置为 NO:

[MTACrashReporter sharedInstance].enableCrashReport = NO;

OK , 问题解决了,

另外友盟的也有:

/** 开启CrashReport收集, 默认YES(开启状态).
@param value 设置为NO,可关闭友盟CrashReport收集功能.
@return void.
*/
+ (void)setCrashReportEnabled:(BOOL)value;

[MobClick setCrashReportEnabled:NO];

但单对我这个项目来说,其实没有影响,特意测试了一下,设不设置无影响。

小结

Xcode不输出Crash日志可能的原因:

  1. NSSetUncaughtExceptionHandler() 可能被重写了, 你调用之前它之后,(比如你引用了一些第三方库, 它的SDK里面可能包含了把Crash的日志上传到服务器, 这样这个日志可能被重写了, 就不打印本地的崩溃信息了) 尽量把它放在didFinishLaunchingWithOptions 最后面的一行代码块里.

但是不一定管用,就像开始的试了无效果。

  1. 还一种崩溃的情况是 EXC_BAD_ACCESS 当遇到这种错误, 控制一般不会给你很多关于崩溃的信息, 这种崩溃你只能使用下面这个调试方法, 不过记住你在正式发布的时候记得把这个勾取消, 不然会造成一些严重的问题.

因为选择了zombie以后所有oc对象都不会呗释放.

image

这个很少会这样吧!!!

其实大部分的原因都是因为引用的一些第三方库, 它的SDK里面可能包含了把Crash的日志上传到服务器的原因,一个一个找找看应该就可以解决。

相关文章

网友评论

    本文标题:Xcode 不打印崩溃日志的问题

    本文链接:https://www.haomeiwen.com/subject/rycwnftx.html