崩溃信息收集(附代码)

崩溃信息收集是应用中很重要的组成部分,可以在app崩溃后分析崩溃原因以解决问题。崩溃信息收集目前可以使用友盟,bugly等第三方sdk,简单方便,当应用崩溃后,崩溃信息会自动发送至相应的服务器,开发者可以登录自己在该sdk官网的帐号查看崩溃信息。这些第三方库很好用,使用方法官网写的也很清楚,所以不再赘述。

友盟官网:http://bbs.umeng.com/portal.php

bugly官网:http://bugly.qq.com/


不使用第三方库崩溃信息收集:

首先,可预测的异常可以用如下方式实现:

    @try {

        // 可能产生异常的代码

         //.......

    }

    @catch (NSException *exception) {

        // 异常后采取的补救措施

        //......

    }

    @finally {

        // 无论是否产生异常都会执行的代码,一般清理现场

        //......

    }


进程中无法预估的异常,可以用如下方式来设置。

1.在应用启动完成方法中设置异常调用方法

2. 方法中获取堆栈信息发送出去,或者保存进日志文件。此方法中直接发送有可能会失败,因为app可能已经崩溃退出了,来不及发送。

//步骤1,在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中增加如下代码 

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

//步骤2

void uncaughtExceptionHandler(NSException *exception){

    /**

     *  获取异常崩溃信息

     */

    NSArray *callStack = [exception callStackSymbols];

    NSString *reason = [exception reason];

    NSString *name = [exception name];

    NSString *content = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];

    

    NSLog(@"%@", content);

    

    /**

     *  把异常崩溃信息发送至开发者邮件

     */

    NSMutableString *mailUrl = [NSMutableString string];

    [mailUrl appendString:@"mailto:test@qq.com"];

    [mailUrl appendString:@"?subject=程序异常崩溃,请配合发送异常报告,谢谢合作!"];

    [mailUrl appendFormat:@"&body=%@", content];

    // 打开地址

    NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];

}


崩溃分析:

工程编译时需要配置产生dsym符号文件,在得到崩溃的堆栈地址(本应用的方法的崩溃地址)后,使用命令

$dwarfdump --arch armv7 Your.app.dSYM --lookup 0x52846 | grep 'Line table'

可以从符号表中检索出崩溃地址对应的源文件和行号,然后根据该行号可以定位具体的代码。

命令中的armv7是CPU指令集中的一个指令, 之后的参数为dsym文件的路径, 0x52846为崩溃的堆栈地址,grep指令是过滤参数

运行结果如下:

1
2
Line table dir : '/data/.../Src/OBDConnectSetting/Controller'
Line table file: 'OBDFirstConnectViewController.m' line 882, column 5 with start address 0x000000000052768

此部分参考网址:http://foggry.com/blog/2015/07/27/ru-he-shou-dong-jie-xi-crashlog/


这个功能最好使用第三方的sdk,因为使用简单,功能强大。这些sdk除了崩溃信息收集之外还提供了用户分析,用户设备信息采集等一系列功能。对于产品的使用追踪非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值