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 ...
随机推荐
- CF习题集二
CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...
- Android BottomNavigationView的用法
BottomNavigationView是相当于一个导航的标签,但是它的形式就是像QQ,微信之类的界面 这三个图标就是BottomNavigationView的体现. 至于写出后怎样绑定这三个界面,就 ...
- JAVA程序设计环境
JDK ,Java Development Kit(Java开发工具包) JRE ,Java Runtime Environment(Java运行时环境) SE ,Standard Edition ...
- 《RabbitMQ》如何保证消息的可靠性
一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失. 一 消息生产者没有把消息成功发送到MQ 1.1 事务机制 AMQP协议提供了事务机制,在投递消息 ...
- Kubernetes 使用arthas进行调试
环境 因为k8s中是最基本的jre,网上说缺少tools.jar,但是补充了以后还是不行,最后还是将整个jdk给移到容器中的. jre中执行: /home # /opt/jre/bin/java -j ...
- PYTHON-anaconda-安装
1.下载: 官网地址:https://www.anaconda.com/products/individual/get-started 镜像地址(推荐):https://mirrors.tuna.ts ...
- 更优雅的配置:docker/运维/业务中的环境变量
目录 docker-compose 环境变量 .env 文件 env_file docker stack 不支持基于文件的环境变量 envsubst envsubst.py 1. 使用行内键值对 2. ...
- jupyter 安装 卸载 包
# 安装 !pip install 库名 # 卸载 !pip uninstall 库名 -y
- 蒲公英 · JELLY技术周刊 Vol.18 关于 React 那些设计
蒲公英 · JELLY技术周刊 Vol.18 自 2011 年,Facebook 第一次在 News Feed 上采用了 React 框架,十年来 React 生态中很多好用的功能和工具在诸多设计思想 ...
- 转圈游戏C++
转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...