Crash分析

Crash分析,第1张

SIGABRT:异常终止条件,例如abort()所发动者

SIGSEGV:非法内存访问(段错误)

SIGTERM: 发送给程序的终止请求

SIGINT: 外部中断,通常为用户所发动

SIGILL: 非法程序映像,例如非法指令

SIGFPE: 错误的算术运算,例如除以零

0x8badf00d表示app在一定时间内无响应被watchdog杀掉,对此类crash,应该审查app在初始化时的 *** 作是否正确,是否在主线程请求了网络调用或者其他耗时的 *** 作方法卡住了正常初始化流程。简单来说就是看门狗超时,在iOSapp上,经常出现在执行一个同步网络请求调用而阻塞主线程的情况

0xdeadfa11 表示app被用户强制退出

0xc00010ff 表示app因运行温度过高而被杀掉

用户手机上 设置 ->隐私 ->分析 里面的,可以连接电脑 Xcode 导出。

在 Xcode ->Window ->Organizer ->Crashes 里面可以查看

优点: 理论上捕获类型最全,因为是 launchd 进程捕获的日志。

缺点:不是全量日志,因为需要用户隐私授权才会上报,没有数据化支撑。

接入一些 APM 产品, 如 EMAS、mPaaS、phabricator 等。

接入 PLCrashReporter 、 KSCrash 等 SDK 进行收集,上报到自建平台统计

优点:可以自建数据化支撑,获取 Crash 率等指标。

缺点:存在无法捕获的 Crash 的类型。

苹果收集的日志,Xcode会自动帮我们符号化,如果你没有发布包,比如是别人电脑打包的发布包,或者是一些平台上打的包,只需要你把 xcarchive 拷贝到 $HOME/Library/Developer/Xcode/Archives 目录下之后,Xcode 就可以自动帮你符号化了。

“.app”, “.dSYM”和 ".crash"文件放到同一个目录下

设置环境变量路径

终端下执行命令:

在审核时或线上版本中经常会出现各种离奇的崩溃,本文以命令行分析崩溃定位:

准备:

参考&引用&拓展阅读

收集iOSCrash框架代码如下:

#import

@interface CatchCrash : NSObject

void uncaughtExceptionHandler(NSException *exception)

@end

#import "CatchCrash.h"

@implementation CatchCrash

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]

NSLog(@"%@", exceptionInfo)

NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray]

[tmpArr insertObject:reason atIndex:0]

//保存到本地 -- 当然你可以在下次启动的时候,上传这个log

[exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()] atomically:YES encoding:NSUTF8StringEncoding error:nil]

}

@end

//注册消息处理函数的处理方法

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7914039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存