文档介绍:谈崩溃管理之实践
听云@杨凯
关于崩溃管理
什么是崩溃管理
崩溃管理的内容
崩溃管理的作用
关于崩溃管理
•崩溃是丌能容忍的
•针对崩溃的管理•捕获并记录崩溃
•最及时的了解、跟踪崩溃
•针对发布后崩溃的管理•崩溃信息符号化
•以bug为对象进行管理•帮助快速定位、解决问题
• Backtrace等搜索、过滤
•何时发生的? 关闭、忽略
•什么环境? 各维度统计分析
•怎样发生的?
警报等
什么是崩溃管理崩溃管理的内容崩溃管理的意义
崩溃管理
崩溃管理乊捕捉
捕捉方式1:NSSetUncaughtExceptionHandler()void myHandler(NSException *exception)
{
•
代码: NSSetUncaughtExceptionHandler(NULL);
•优点:简单 NSLog(@”excetion:%@”, exception);
}
•缺点:只能捕获NSException类型的异常
void install()
{
NSSetUncaughtExceptionHandler(&myHandler);
}
崩溃管理乊捕捉
捕捉方式2:signal(,) void mySigalHandler(int sig)
{
•
代码: uninstall ();
•优点:简单,抓到一些signal 类型的崩溃 NSLog(@”signal=%d”, sig);
//…
•缺点:有时,崩溃栈信息丌全,缺最关键的栈顶
}
void install()
{
signal(11,&mySigalHandler);
}
崩溃管理乊捕捉
void mySigalHandler (int sig,siginfo_t *info, void*voidp)
捕捉方式3:sigaction{ (,,)
uninstall ();
•代码: NSLog(@”signal=%d”, sig);
//…
•优点:能抓到比较全面} callStack
void install()
•缺点:复杂{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
= SA_RESETHAND|SA_NODEFER;
= &mySigalHandler;//设置handler
//你关注的signal:
if (sigaction(11, &sa, NULL) != 0) {
NSLog(@“Error”);
return ;
}
}
崩溃管理乊捕捉
获得backtrace
NSExceptionObj. callStackSymbols +[NSThread callStackSymbols]
backtrace_symbols() 从线程的上下文获得
崩溃管理乊捕捉
获得binaryImageList
•_dyld_get_image_header(i)和_dyld_image_count()
•从文件镜像到内存
•地址是浮动的,与slide值有关
•两个地址和UUID
从线程的上下文获得
崩溃管理乊符号化
01 常用命令atos、dwarfdump、otool、lipo
02 ASLR不slide
1、根据UUID确定符号表文件
在服务器端自动符号化
03 2、使用工具根据地址获得符号
3、格式化输出