iOS第三方平台和原生崩溃信息获取冲突的问题及崩溃日志的分析

记录最近一次遇到的问题。

最近一个项目的crash report是自己写的原生的方法,再次启动后提交到自己服务器。自己运行测试的时候没有问题,获取的日志可以追踪到错误的代码位置。但是后来发布正式版后,服务器上接收到了几个日志,于是下载下来追踪,但是发现全部都是Application received signal SIGABRT这种错误。根据地址分析之后只能查到是UmengSignalHandler,但是代码里根本搜不到这个,看名字猜想这个应该是友盟的crash report,然后网上找到确实存在冲突的问题,即使没有使用友盟的crash report(我只是用到了友盟的统计和推送)。

以下是解决冲突的办法

思路:

首先保存第三方的 ExceptionHandler,再设置自己处理 exception 的 ExceptionHandler,在自己的 ExceptionHandler 处理完异常之后,再将异常塞给之前的第三方 ExceptionHandler

代码:


static NSUncaughtExceptionHandler *_previousHandler;


+ (void)setDefaultHandler {
    _previousHandler = NSGetUncaughtExceptionHandler();
    
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
}

// 崩溃时的回调函数
void UncaughtExceptionHandler(NSException * exception) {
    //处理崩溃,比如保存崩溃信息
    //todo~~

    //将异常塞给之前的第三方
    _previousHandler(exception);
}

 

 

另外关于崩溃日志的分析

  • 获取dSYM文件
    Xcode-> Window -> Organizer -> 选中需要的Archives -> 右击show in finder -> 右击显示包内容 -> dSYMs文件夹中即可找到dSYM文件
  • 把这个dSYM文件拷贝到新的文件夹(最好是你再桌面新建一个)
  • 右键dSYM文件显示包内容--》Contents--》Resources--》DWARF,里面有个项目的文件,记录下这个文件路径
  • 找到解析的地址(地址一般就是你项目名对应的第一条地址记录,如下图)
  • 将改地址减去偏移值slide值(偏移值需要在捕捉异常时获取,不知道的可以网上找找方法)得到一个新地址(地址是16进制的,而偏移值是十进制的,注意转换)
  • 在终端运行如下命令(直接把DWARF文件夹拖进终端就可以填充项目路径了)
    $atos -o DWARF路径 项目名 新地址

    这样就可以定位到具体代码了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值