美文网首页
iOS崩溃分析及全面监控

iOS崩溃分析及全面监控

作者: 安心做个笨男孩 | 来源:发表于2020-07-28 17:13 被阅读0次

奔溃信息分类

可以通过信号捕获的崩溃信息:数组越界,野指针问题,NSNotification线程问题,KVO 问题
无法被信号捕获的奔溃信息:后台任务超时、内存超出限制、主线程卡顿超阈值

通过信号捕获的崩溃信息

1、一般使用bugly全局监听,获取崩溃信息。
信号量捕获实现代码如下

// 注册signalHandler
void registerSignalHandler(void) {
    signal(SIGSEGV, handleSignalException);
    signal(SIGFPE, handleSignalException);
    signal(SIGBUS, handleSignalException);
    signal(SIGPIPE, handleSignalException);
    signal(SIGHUP, handleSignalException);
    signal(SIGINT, handleSignalException);
    signal(SIGQUIT, handleSignalException);
    signal(SIGABRT, handleSignalException);
    signal(SIGILL, handleSignalException);
}

// 打印捕获到的崩溃信息
void handleSignalException(int signal) {
    NSMutableString *crashString = [[NSMutableString alloc]init];
    void* callstack[128];// 指针数组
   // backtrace()函数用与获取当前线程的调用堆栈,获取的信息将会被存放在callstack中
    int i, frames = backtrace(callstack, 128);
   // backtrace_symbols()将从backtrace函数获取的信息转化为一个字符串数组.
    char** traceChar = backtrace_symbols(callstack, frames);
    for (i = 0; i <frames; ++i) {
        [crashString appendFormat:@"%s\n", traceChar[i]];
    }
    NSLog(crashString);
}

2、常见的异常编码

  • 0x8badf00d,表示 App 在一定时间内无响应而被 watchdog 杀掉的情况。(主线程被卡)
  • 0xdeadfa11,表示 App 被用户强制退出。
  • 0xc00010ff,表示 App 因为运行造成设备温度太高而被杀掉。

3、在bugly上可以查看到引起奔溃的系统,机型等信息。以及出现奔溃影响的用户数量。根据影响用户数量由大到小排列,优先解决影响面大的。

降低崩溃方式

pod导入SafeKit,无需修改代码降低奔溃发生。

主要针对:数组,字典,可变数组,可变字典,字符串。处理数组越界, 野指针。

创建对应的分类,在分类的load方法中进行方法替换处理。load方法在main() 函数执行前已经完成。
核心代码如下:

// 进行系统方法替换
+ (void)safe_swizzleMethod:(Class)srcClass srcSel:(SEL)srcSel tarClass:(Class)tarClass tarSel:(SEL)tarSel{
    if (!srcClass) {
        return;
    }
    if (!srcSel) {
        return;
    }
    if (!tarClass) {
        return;
    }
    if (!tarSel) {
        return;
    }
    // class_getInstanceMethod获取类中的方法
    Method srcMethod = class_getInstanceMethod(srcClass,srcSel);
    Method tarMethod = class_getInstanceMethod(tarClass,tarSel);
    // 将系统的类中方法替换成已经进行安全处理的方法
    method_exchangeImplementations(srcMethod, tarMethod);
}

相关文章

网友评论

      本文标题:iOS崩溃分析及全面监控

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