美文网首页
iOS 捕获异常

iOS 捕获异常

作者: 高高叔叔 | 来源:发表于2017-04-27 16:05 被阅读151次

产品测试和上线后往往会遇到一些bug,开发者需要定位到异常的代码这个时候就要捕获异常。

可以通过写一个类CrashExceptioinCatcher,在类中定义一个静态方法startCrashExceptionCatch, 方法里调NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

绑定void uncaughtExceptionHandler(NSException *exception)方法处理异常信息,在void uncaughtExceptionHandler(NSException *exception)里将异常打印出来,并附带上设备信息提交至服务器,这样在测试时候能够比较有效的收集异常信息。

头文件
#import <Foundation/Foundation.h>
#import <objc/runtime.h>

@interface CatchCrash : NSObject

void uncaughtExceptionHandler(NSException *exception);

@end
实现文件
void uncaughtExceptionHandler(NSException *exception)
{
    // 异常的堆栈信息
    NSArray *stackArray = [exception callStackSymbols];
    // 出现异常的原因
    NSString *reason = [exception reason];
    // 异常名称
    NSString *name = [exception name];
    NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
    // 异常出处
    NSString * mainCallStackSymbolMsg = [CatchCrash getMainCallStackSymbolMessageWithCallStackSymbols:stackArray];
    
    NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];
    [tmpArr insertObject:reason atIndex:0];
    NSString * errorPlace = [NSString stringWithFormat:@"Error Place%@",mainCallStackSymbolMsg];
        NSLog(@"初始化完毕%@",errorPlace);
    
    NSString * file =[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()] ;
    //保存到本地  --  当然你可以在下次启动的时候,上传这个log
    [exceptionInfo writeToFile:file atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"打印出来看看____%@",exceptionInfo);
}
使用方法
    //注册消息处理函数的处理方法
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
    
    ViewController *testVc = [[ViewController alloc] init];
    self.window.rootViewController = testVc;
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
DEMO地址

https://github.com/godwar10/CatchCrash

写在最后
大神勿喷,最近才写记录下方便以后查找。希望能和大家一起学习交流进步。如果觉得好请赏点小钱——谢谢。 祝大家代码永无bug

相关文章

  • iOS Crash 流程化0:概览

    Ref:iOS Crash 捕获及堆栈符号化思路剖析 iOS Crash 流程化:概览崩溃捕获Mach 异常捕获U...

  • 异常捕获

    异常捕获 有两种 IOS系统的异常NSSetUncaughtExceptionHandler(&exception...

  • iOS异常捕获

    参考的是这篇文章:iOS异常捕获

  • iOS异常捕获

    转载自:向晨宇的技术博客-iOS异常捕获 文章目录前言一. 系统Crash二. 处理signal1. 下面是一些信...

  • iOS 异常捕获

    iOS崩溃情况 一般是由 Mach异常或 Objective-C 异常(NSException)引起的。我们可以针...

  • iOS 捕获异常

    产品测试和上线后往往会遇到一些bug,开发者需要定位到异常的代码这个时候就要捕获异常。 可以通过写一个类Crash...

  • iOS异常捕获

    文章目录 一. 系统Crash 二. 处理signal 下面是一些信号说明 关键点注意 三. 实战 四. Cras...

  • iOS异常捕获

    https://www.dazhuanlan.com/2020/01/06/5e12aaabf0437/https...

  • iOS 捕获异常

    首先创建一个捕获异常的函数: 自定义编写捕获到异常后的逻辑处理 在适当位置添加异常捕获的监听:比如didFinis...

  • iOS异常捕获

    前言 今天在ios高级群237305299,有朋友问到iOS的异常捕捉的问题,这一块以前也没有研究过,趁此机会研究...

网友评论

      本文标题:iOS 捕获异常

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