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

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. // Override point for customization after application launch.
  3. NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
  4. return YES;
  5. }
  6.  
  7. void UncaughtExceptionHandler(NSException *exception) {
  8. /**
  9. * 获取异常崩溃信息
  10. */
  11. NSArray *callStack = [exception callStackSymbols];
  12. NSString *reason = [exception reason];
  13. NSString *name = [exception name];
  14. NSString *content = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];
  15.  
  16. /**
  17. * 把异常崩溃信息发送至开发者邮件
  18. */
  19. NSMutableString *mailUrl = [NSMutableString string];
  20. [mailUrl appendString:@"mailto:test@qq.com"];
  21. [mailUrl appendString:@"?subject=程序异常崩溃,请配合发送异常报告,谢谢合作!"];
  22. [mailUrl appendFormat:@"&body=%@", content];
  23. // 打开地址
  24. NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  25. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];
  26. }
  1. 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. // 1.进程信息
  2.  
  3. Incident Identifier: 4CBF22C2-3E92-434B-B5DF-C35CF670B007
  4. CrashReporter Key: 1a0da8d4b693f98613cf29e3a42e503ffa91d9fb
  5. Hardware Model: iPhone7,
  6. Process: ********** []
  7. Path: /private/var/containers/Bundle/Application/1096962B-8F33-4BA5--C733C98D3E2F/**********.app/**********
  8. Identifier: **********
  9. Version: 21500 (2.1.5)
  10. Code Type: ARM-64 (Native)
  11. Parent Process: launchd [1]
  12.  
  13. // 2.基本信息
  14. Date/Time: 2017-03-02 09:59:59.59 +0800
  15. Launch Time: 2017-03-02 09:59:59.59 +0800
  16. OS Version: iOS 9.3.2 (13F69)
  17. Report Version: 105
  18.  
  19. // 3.异常信息
  20. Exception Type: EXC_CRASH (SIGABRT)
  21. Exception Codes: 0x0000000000000000, 0x0000000000000000
  22. Exception Note: EXC_CORPSE_NOTIFY
  23. Triggered by Thread: 0
  24.  
  25. Filtered syslog:
  26. None found
  27.  
  28. Last Exception Backtrace:
  29. 0 CoreFoundation 0x182df6db0 __exceptionPreprocess + 124
  30. 1 libobjc.A.dylib 0x18245bf80 objc_exception_throw + 56
  31. 2 CoreFoundation 0x182cda708 -[__NSArrayM insertObject:atIndex:] + 808
  32. 3 *************** 0x100123c50 -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:49)
  33. 4 UIKit 0x187fca9c0 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 400
  34. 5 UIKit 0x1881fa184 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2904
  35. 6 UIKit 0x1881fe5f0 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1684
  36. 7 UIKit 0x1881fb764 -[UIApplication workspaceDidEndTransaction:] + 168
  37. 8 FrontBoardServices 0x1847977ac __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36
  38. 9 FrontBoardServices 0x184797618 -[FBSSerialQueue _performNext] + 168
  39. 10 FrontBoardServices 0x1847979c8 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
  40. 11 CoreFoundation 0x182dad09c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
  41. 12 CoreFoundation 0x182dacb30 __CFRunLoopDoSources0 + 540
  42. 13 CoreFoundation 0x182daa830 __CFRunLoopRun + 724
  43. 14 CoreFoundation 0x182cd4c50 CFRunLoopRunSpecific + 384
  44. 15 UIKit 0x187fc394c -[UIApplication _run] + 460
  45. 16 UIKit 0x187fbe088 UIApplicationMain + 204
  46. 17 *************** 0x10017a5ec main (main.m:14)
  47. 18 libdyld.dylib 0x1828728b8 start + 4
  48.  
  49. Global Trace Buffer (reverse chronological seconds):
  50. 6148914688.535940 CFNetwork 0x000000018347bf18 TCP Conn 0x12dd91c60 complete. fd: 8, err: 0
  51. 6148914688.536304 CFNetwork 0x000000018347d444 TCP Conn 0x12dd91c60 event 1. err: 0
  52. 6148914688.549507 CFNetwork 0x000000018347d51c TCP Conn 0x12dd91c60 started
  53. 6148914688.550894 CFNetwork 0x00000001834d7e5c Creating default cookie storage with default identifier
  54. 6148914688.550894 CFNetwork 0x00000001834d7e28 Faulting in CFHTTPCookieStorage singleton
  55. 6148914688.550894 CFNetwork 0x0000000183529e50 Faulting in NSHTTPCookieStorage singleton
  56.  
  57. // 4.线程回调
  58. Thread 0 name: Dispatch queue: com.apple.main-thread
  59.  
  60. // 5.线程状态
  61. Thread 0 Crashed:
  62. 0 libsystem_kernel.dylib 0x000000018299011c __pthread_kill + 8
  63. 1 libsystem_pthread.dylib 0x0000000182a5cef8 pthread_kill + 112
  64. 2 libsystem_c.dylib 0x0000000182901dac abort + 140
  65. 3 libc++abi.dylib 0x00000001824353f4 __cxa_bad_cast + 0
  66. 4 libc++abi.dylib 0x0000000182451e98 default_unexpected_handler() + 0
  67. 5 libobjc.A.dylib 0x000000018245c248 _objc_terminate() + 124
  68. 6 libc++abi.dylib 0x000000018244ef44 std::__terminate(void (*)()) + 16
  69. 7 libc++abi.dylib 0x000000018244eb10 __cxa_rethrow + 144
  70. 8 libobjc.A.dylib 0x000000018245c120 objc_exception_rethrow + 44
  71. 9 CoreFoundation 0x0000000182cd4cf8 CFRunLoopRunSpecific + 552
  72. 10 UIKit 0x0000000187fc394c -[UIApplication _run] + 460
  73. 11 UIKit 0x0000000187fbe088 UIApplicationMain + 204
  74. 12 *********************** 0x000000010017a5ec main (main.m:14)
  75. 13 libdyld.dylib 0x00000001828728b8 start + 4
  76.  
  77. Thread 1 name: Dispatch queue: NSOperationQueue 0x12dd6d5e0 :: NSOperation 0x12ded4110 (QOS: LEGACY)
  78. Thread 1:
  79. 0 libsystem_kernel.dylib 0x000000018298f140 __bsdthread_ctl + 8
  80. 1 libsystem_pthread.dylib 0x0000000182a5eb10 _pthread_set_properties_self + 64
  81. 2 Foundation 0x00000001837b2b20 iop_set_pthread + 200
  82. 3 Foundation 0x00000001837b2890 __NSOQSchedule_f + 60
  83.  
  84. // 6.二进制映像
  85. Binary Images:
  86. 0x100088000 - 0x1002d7fff *********************** arm64 <da83a4ffedd937bd93e8313b34363457> /var/containers/Bundle/Application/1096962B-8F33-4BA5-8101-C733C98D3E2F/***********************.app/***********************
  87. 0x100630000 - 0x100657fff MagicalRecord arm64 <6bcc1202aef333e5b1c7c62443f57b2a> /var/containers/Bundle/Application/1096962B-8F33-4BA5-8101-C733C98D3E2F/***********************.app/Frameworks/MagicalRecord.framework/MagicalRecord
(1) 进程信息
第一部分是闪退进程的相关信息。
 
Incident Identifier是崩溃报告的唯一标识符。
 
CrashReporter Key 是与设备标识相对应的唯一键值。虽然它不是真正的设备标识符,但也是一个非常有用的情报:如果你看到100个崩溃日志的CrashReporter Key值都是相同的,或者只有少数几个不同的CrashReport值,说明这不是一个普遍的问题,只发生在一个或少数几个设备上。
 
Hardware Model 标识设备类型。 如果很多崩溃日志都是来自相同的设备类型,说明应用只在某特定类型的设备上有问题。上面的日志里,崩溃日志产生的设备是iPhone 4s。
 
Process 是应用名称。中括号里面的数字是闪退时应用的进程ID。
 
(2) 基本信息
这部分给出了一些基本信息,包括闪退发生的日期和时间,设备的iOS版本。如果有很多崩溃日志都来自iOS 6.0,说明问题只发生在iOS 6.0上。
 
(3) 异常
在这部分,你可以看到闪退发生时抛出的异常类型。还能看到异常编码和抛出异常的线程。根据崩溃报告类型的不同,在这部分你还能看到一些另外的信息。
 
(4) 线程回溯

这部分提供应用中所有线程的回溯日志。 回溯是闪退发生时所有活动帧清单。它包含闪退发生时调用函数的清单。

 
      2       XXALib      0x24243124    0x82000 + 9383
   帧编号    库名          调用方法地址     指向文件  + 文件中的代码行
 
(5) 线程状态
这部分是闪退时寄存器中的值。一般不需要这部分的信息,因为回溯部分的信息已经足够让你找出问题所在。
 
(6) 二进制映像
这部分列出了闪退时已经加载的二进制文件。
 
每次项目编译后的.dSYM文件都有可能不一样,xx.app、xx.app.dSYM、xx.crash三者文件的UUID一样才能正确解析出函数信息

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文件的分析

a.配置环境变量DEVELOPER_DIR
  1. export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
    b.输出bug信息
    symbo xx.crash xx.dSYM ->bug.txt
  2.  
  3. 参考:http://www.cocoachina.com/ios/20141219/10694.html https://github.com/answer-huang/dSYMTools
 
 
 
 

ios bug 分析的更多相关文章

  1. IOS Bug分析

    异常代码是SIGABRT.通常,  SIGABRT 异常是由于某个对象接收到未实现的消息引起的. 或者,用简单的话说,在某个对象上调用了不存在的方法. iOS应用崩溃日志分析 分析iOS Crash文 ...

  2. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  3. iOS --------Crash 分析(一)

    iOS Crash 分析(文一)- 开始 1. 名词解释 1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID.目的是为了唯一识别这个文件. 2. dwarfdump 苹 ...

  4. 文《左右c++与java中国的垃圾问题的分析与解决》一bug分析

    文<左右c++与java中国的垃圾问题的分析与解决>一bug分析 DionysosLai(906391500@qq.com) 2014/10/21 在前几篇一博客<关于c++与jav ...

  5. Bug预防体系(上千bug分析后总结的最佳实践)

    Bug预防体系(上千bug分析后总结的最佳实践) 原创 2017-08-16俞美玲 光荣之路 吴老的<selenium webdriver 实战宝典>出版了!  web常见产品问题及预防 ...

  6. 线上bug分析

    昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户 ...

  7. 【转】ProGuard的作用、使用及bug分析

    原文地址:http://blog.csdn.net/forlong401/article/details/23539123. http://www.trinea.cn/android/proguard ...

  8. iOS Crash 分析 符号化崩溃日志

    参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhack ...

  9. 协议解析Bug分析

    协议解析Bug分析 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug.        一.Bug描写叙述 腾讯收购的Foxmailclient能够作为outlookclient ...

随机推荐

  1. CF习题集二

    CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...

  2. Android BottomNavigationView的用法

    BottomNavigationView是相当于一个导航的标签,但是它的形式就是像QQ,微信之类的界面 这三个图标就是BottomNavigationView的体现. 至于写出后怎样绑定这三个界面,就 ...

  3. JAVA程序设计环境

    JDK ,Java Development Kit(Java开发工具包) JRE ,Java Runtime Environment(Java运行时环境) SE   ,Standard Edition ...

  4. 《RabbitMQ》如何保证消息的可靠性

    一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失. 一 消息生产者没有把消息成功发送到MQ 1.1 事务机制 AMQP协议提供了事务机制,在投递消息 ...

  5. Kubernetes 使用arthas进行调试

    环境 因为k8s中是最基本的jre,网上说缺少tools.jar,但是补充了以后还是不行,最后还是将整个jdk给移到容器中的. jre中执行: /home # /opt/jre/bin/java -j ...

  6. PYTHON-anaconda-安装

    1.下载: 官网地址:https://www.anaconda.com/products/individual/get-started 镜像地址(推荐):https://mirrors.tuna.ts ...

  7. 更优雅的配置:docker/运维/业务中的环境变量

    目录 docker-compose 环境变量 .env 文件 env_file docker stack 不支持基于文件的环境变量 envsubst envsubst.py 1. 使用行内键值对 2. ...

  8. jupyter 安装 卸载 包

    # 安装 !pip install 库名 # 卸载 !pip uninstall 库名 -y

  9. 蒲公英 &#183; JELLY技术周刊 Vol.18 关于 React 那些设计

    蒲公英 · JELLY技术周刊 Vol.18 自 2011 年,Facebook 第一次在 News Feed 上采用了 React 框架,十年来 React 生态中很多好用的功能和工具在诸多设计思想 ...

  10. 转圈游戏C++

    转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...