美文网首页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