ios 收集crash xcode 调试 捕捉signal信号

//处理信号类型的异常

void SignalExceptionHandler(int signal)

{

    

    NSMutableString *mstr = [[NSMutableString alloc] init];

    [mstr appendString:@"Stack:\n"];

    void* callstack[128];//堆栈方法数组

    int i, frames = backtrace(callstack, 128);//iOS的方法backtrace中获取错误堆栈方法指针数组,返回数目

    char** strs = backtrace_symbols(callstack, frames);//符号化

    for (i = 0; i <frames; ++i) {

        [mstr appendFormat:@"%s\n", strs[i]];

    }

//    NSMutableArray *symbolsBackTrace=[NSMutableArray arrayWithCapacity:frames];

//    for (i=0; i<UncaughtExceptionHandlerReportAddressCount; i++) {

//        [symbolsBackTrace addObject:[NSString stringWithUTF8String:strs[i]]];

//    }

//    free(strs);

    [SignalHandler saveCreash:mstr];


}


void InstallSignalHandler(void)

{

    signal(SIGHUP, SignalExceptionHandler);

    signal(SIGINT, SignalExceptionHandler);

    signal(SIGQUIT, SignalExceptionHandler);

    

    signal(SIGABRT, SignalExceptionHandler);

    signal(SIGILL, SignalExceptionHandler);

    signal(SIGSEGV, SignalExceptionHandler);

    signal(SIGFPE, SignalExceptionHandler);

    signal(SIGBUS, SignalExceptionHandler);

    signal(SIGPIPE, SignalExceptionHandler);

}



关于signal信号的捕捉,在Xcode调试时,Debugger模式会先于我们的代码catch到所有的crash,所以需要直接从模拟器中进入程序才可以测试


http://blog.csdn.net/skylin19840101/article/details/52935637


但是在Xcode里调试的时候,程序不会进入SignalExceptionHandler处理函数里

我们需要在lldb中输入以下命令,signal的回调就可以进来了

pro hand -p true -s false SIGABRT

注意:SIGABRT可以替换为你需要的任何signal类型,比如SIGSEGV


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值