[iOS]转发异常信号

暮雨烟疏 · · 241 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

背景:项目中有个SDK库(Golang),会抛出异常信号,第三方crash日志记录工具会分析这个信号而造成崩溃,我们做作的就是在三方注册异常监听后,重新注册,覆盖监听,达到避免crash的目的。

@interface TestCrash : NSObject

+(void)registerExceptionHandler;
@end

+(void)registerExceptionHandler
{
    signal(SIGABRT, SignalHandler);
    signal(SIGILL, SignalHandler);
    signal(SIGFPE, SignalHandler);
    signal(SIGBUS, SignalHandler);
    signal(SIGTRAP, SignalHandler);
    signal(SIGPIPE, SignalHandler);
    signal(SIGSEGV, SignalHandler);
}

void SignalHandler(int signalCode)
{

    const NSInteger kCSIIStackFramesMax = 128;
    void *stack[kCSIIStackFramesMax];
    NSInteger frameCount = backtrace(stack, kCSIIStackFramesMax);
    char **lines = backtrace_symbols(stack, (int)frameCount);

    NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frameCount];
    for (NSInteger i = 1; i < frameCount; i++)
        [backtrace addObject:[NSString stringWithUTF8String:lines[i]]];

    free(lines);

    NSDictionary *userInfo = @{@"signal_code": @(signalCode), @"kCSIIExceptionUserInfoBacktraceKey": backtrace};
    NSString *reason = [NSString stringWithFormat:@"App terminated by SIG%@", [NSString stringWithUTF8String:sys_signame[signalCode]].uppercaseString];
    NSException *e = [NSException exceptionWithName:@"Fatal Signal" reason:reason userInfo:userInfo];

    
    NSLog(@"=======>%@",userInfo);
    sleep(2.0);
}

最好能用signal(SIGBUS, SIG_IGN);这种形式,让系统忽略处理


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:暮雨烟疏

查看原文:[iOS]转发异常信号

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

241 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传