ios bug 分析
ios中线上或者内部测试bug统计收集有两种方法:
1)使用第三方bug收集
1.bugHD
来源http://bughd.com/doc/ios-customize
2.bugtags
来源http://help.bugtags.com/hc/kb/article/124400/
http://help.bugtags.com/hc/kb/article/68482/
3.KSCrash
https://github.com/kstenerud/KSCrash
4.友盟
主要不要多种一起使用,使用多个崩溃收集第三方会导致NSSetUncaughtExceptionHandler()函数指针的恶意覆盖,导致有些第三方不能收到崩溃信息
2)自己搭建后台收集bug
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
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"]];
/**
* 把异常崩溃信息发送至开发者邮件
*/
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]];
}
NSSetUncaughtExceptionHandler只能监听NSException类型的异常,而引起崩溃的大多数原因如:内存访问错误,重复释放等错误就无能为力了。因为这种错误它抛出的是Signal,
所以必须要专门做Signal处理, 可以参考如下封装;测试时,可以调用abort()函数,模拟发送SIGABRT信号,不要联机测试,要脱机测试。
参考:http://www.cnblogs.com/easonoutlook/archive/2012/12/27/2835979.html
http://blog.csdn.net/qianlima210210/article/details/51226087
https://github.com/easonoutlook/UncaughtExceptionHandler
从iOS设备导出的bug日志大概是这样的:
// 1.进程信息 Incident Identifier: 4CBF22C2-3E92-434B-B5DF-C35CF670B007
CrashReporter Key: 1a0da8d4b693f98613cf29e3a42e503ffa91d9fb
Hardware Model: iPhone7,
Process: ********** []
Path: /private/var/containers/Bundle/Application/1096962B-8F33-4BA5--C733C98D3E2F/**********.app/**********
Identifier: **********
Version: 21500 (2.1.5)
Code Type: ARM-64 (Native)
Parent Process: launchd [1] // 2.基本信息
Date/Time: 2017-03-02 09:59:59.59 +0800
Launch Time: 2017-03-02 09:59:59.59 +0800
OS Version: iOS 9.3.2 (13F69)
Report Version: 105 // 3.异常信息
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0 Filtered syslog:
None found Last Exception Backtrace:
0 CoreFoundation 0x182df6db0 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x18245bf80 objc_exception_throw + 56
2 CoreFoundation 0x182cda708 -[__NSArrayM insertObject:atIndex:] + 808
3 *************** 0x100123c50 -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:49)
4 UIKit 0x187fca9c0 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 400
5 UIKit 0x1881fa184 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2904
6 UIKit 0x1881fe5f0 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1684
7 UIKit 0x1881fb764 -[UIApplication workspaceDidEndTransaction:] + 168
8 FrontBoardServices 0x1847977ac __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36
9 FrontBoardServices 0x184797618 -[FBSSerialQueue _performNext] + 168
10 FrontBoardServices 0x1847979c8 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
11 CoreFoundation 0x182dad09c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
12 CoreFoundation 0x182dacb30 __CFRunLoopDoSources0 + 540
13 CoreFoundation 0x182daa830 __CFRunLoopRun + 724
14 CoreFoundation 0x182cd4c50 CFRunLoopRunSpecific + 384
15 UIKit 0x187fc394c -[UIApplication _run] + 460
16 UIKit 0x187fbe088 UIApplicationMain + 204
17 *************** 0x10017a5ec main (main.m:14)
18 libdyld.dylib 0x1828728b8 start + 4 Global Trace Buffer (reverse chronological seconds):
6148914688.535940 CFNetwork 0x000000018347bf18 TCP Conn 0x12dd91c60 complete. fd: 8, err: 0
6148914688.536304 CFNetwork 0x000000018347d444 TCP Conn 0x12dd91c60 event 1. err: 0
6148914688.549507 CFNetwork 0x000000018347d51c TCP Conn 0x12dd91c60 started
6148914688.550894 CFNetwork 0x00000001834d7e5c Creating default cookie storage with default identifier
6148914688.550894 CFNetwork 0x00000001834d7e28 Faulting in CFHTTPCookieStorage singleton
6148914688.550894 CFNetwork 0x0000000183529e50 Faulting in NSHTTPCookieStorage singleton // 4.线程回调
Thread 0 name: Dispatch queue: com.apple.main-thread // 5.线程状态
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x000000018299011c __pthread_kill + 8
1 libsystem_pthread.dylib 0x0000000182a5cef8 pthread_kill + 112
2 libsystem_c.dylib 0x0000000182901dac abort + 140
3 libc++abi.dylib 0x00000001824353f4 __cxa_bad_cast + 0
4 libc++abi.dylib 0x0000000182451e98 default_unexpected_handler() + 0
5 libobjc.A.dylib 0x000000018245c248 _objc_terminate() + 124
6 libc++abi.dylib 0x000000018244ef44 std::__terminate(void (*)()) + 16
7 libc++abi.dylib 0x000000018244eb10 __cxa_rethrow + 144
8 libobjc.A.dylib 0x000000018245c120 objc_exception_rethrow + 44
9 CoreFoundation 0x0000000182cd4cf8 CFRunLoopRunSpecific + 552
10 UIKit 0x0000000187fc394c -[UIApplication _run] + 460
11 UIKit 0x0000000187fbe088 UIApplicationMain + 204
12 *********************** 0x000000010017a5ec main (main.m:14)
13 libdyld.dylib 0x00000001828728b8 start + 4 Thread 1 name: Dispatch queue: NSOperationQueue 0x12dd6d5e0 :: NSOperation 0x12ded4110 (QOS: LEGACY)
Thread 1:
0 libsystem_kernel.dylib 0x000000018298f140 __bsdthread_ctl + 8
1 libsystem_pthread.dylib 0x0000000182a5eb10 _pthread_set_properties_self + 64
2 Foundation 0x00000001837b2b20 iop_set_pthread + 200
3 Foundation 0x00000001837b2890 __NSOQSchedule_f + 60 // 6.二进制映像
Binary Images:
0x100088000 - 0x1002d7fff *********************** arm64 <da83a4ffedd937bd93e8313b34363457> /var/containers/Bundle/Application/1096962B-8F33-4BA5-8101-C733C98D3E2F/***********************.app/***********************
0x100630000 - 0x100657fff MagicalRecord arm64 <6bcc1202aef333e5b1c7c62443f57b2a> /var/containers/Bundle/Application/1096962B-8F33-4BA5-8101-C733C98D3E2F/***********************.app/Frameworks/MagicalRecord.framework/MagicalRecord
这部分提供应用中所有线程的回溯日志。 回溯是闪退发生时所有活动帧清单。它包含闪退发生时调用函数的清单。
1.查看 xx.app 文件的 UUID,terminal 中输入命令 :
dwarfdump --uuid xx.app/xx (xx代表你的项目名)
2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入命令:
dwarfdump --uuid xx.app.dSYM
3.crash 文件内第一行 Incident Identifier 就是该 crash 文件的 UUID。
.crash文件的分析
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
b.输出bug信息
symbo xx.crash xx.dSYM ->bug.txt 参考:http://www.cocoachina.com/ios/20141219/10694.html https://github.com/answer-huang/dSYMTools
ios bug 分析的更多相关文章
- IOS Bug分析
异常代码是SIGABRT.通常, SIGABRT 异常是由于某个对象接收到未实现的消息引起的. 或者,用简单的话说,在某个对象上调用了不存在的方法. iOS应用崩溃日志分析 分析iOS Crash文 ...
- 关于bug分析与异常处理的一些思考
前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...
- iOS --------Crash 分析(一)
iOS Crash 分析(文一)- 开始 1. 名词解释 1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID.目的是为了唯一识别这个文件. 2. dwarfdump 苹 ...
- 文《左右c++与java中国的垃圾问题的分析与解决》一bug分析
文<左右c++与java中国的垃圾问题的分析与解决>一bug分析 DionysosLai(906391500@qq.com) 2014/10/21 在前几篇一博客<关于c++与jav ...
- Bug预防体系(上千bug分析后总结的最佳实践)
Bug预防体系(上千bug分析后总结的最佳实践) 原创 2017-08-16俞美玲 光荣之路 吴老的<selenium webdriver 实战宝典>出版了! web常见产品问题及预防 ...
- 线上bug分析
昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户 ...
- 【转】ProGuard的作用、使用及bug分析
原文地址:http://blog.csdn.net/forlong401/article/details/23539123. http://www.trinea.cn/android/proguard ...
- iOS Crash 分析 符号化崩溃日志
参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhack ...
- 协议解析Bug分析
协议解析Bug分析 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug. 一.Bug描写叙述 腾讯收购的Foxmailclient能够作为outlookclient ...
随机推荐
- .Net Core中简单使用MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式且面向文档存储的开源数据库系统. 下载地址: https://www.mongodb.com/download-center/community ...
- CSS样式大全(网络收集整理)
CSS样式大全(网络收集整理 字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 { ...
- 全球疫情爬取APP版
全球疫情统计APP图表展示: 将该任务分解成三部分来逐个实现: ①爬取全球的疫情数据存储到云服务器的MySQL上 ②在web项目里添加一个servlet,通过参数的传递得到对应的json数据 ③设计A ...
- SonarQube 扫描 Java 代码
SonarQube 扫描 Java 代码 环境 需要提前安装好 SonarQube7.9,安装步骤见 Docker 安装 SonarQube 步骤 填写项目名 my_project 填写token名 ...
- 【Spring注解驱动开发】使用@PropertySource加载配置文件,我只看这一篇!!
写在前面 很多小伙伴都在问:冰河,你的Spring专题更新完了吗?怎么感觉像是写了一半啊?我:没有更新完呀,整个专题预计会有70多篇.那怎么更新了一半就去写别的了呢?那是因为有很多其他的小伙伴在后台留 ...
- subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.
将anaconda环境下的 lib/python3.5/dist-packages/torch/utils/cpp_extension.py文件 将['ninja','-v']改成['ninja', ...
- C#LeetCode刷题之#561-数组拆分 I(Array Partition I)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3718 访问. 给定长度为 2n 的数组, 你的任务是将这些数分成 ...
- 5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆
摘要:2020年7月9日,ITU正式把NB-IoT纳入5G标准体系! 高速率.低时延与5G是青梅竹马的关系,在大容量的选择上,5G与NB-IoT不断传出着绯闻,终于:2020年7月9日,ITU正式把N ...
- 数据库迁移神器——Flyway
不知道你有没有遇到过这种场景,一套代码部署在不同的环境中,随着时间的过去,各个环境代码有版本差异,代码层面可以通过不同的版本来控制,但是数据库层面经常容易忘记更新! 前言 比如刚开始环境 A 和环境 ...
- Linux系统中有趣的命令(可以玩小游戏)
Linux系统中有趣的命令(可以玩小游戏) 前言 最近,我在看一些关于Linux系统的内容,这里面的内容是真的越学越枯燥,果然学习的过程还是不容易的.记得前几个月初学Linux时,有时候就会碰到小彩蛋 ...