崩溃日志的产生

iOS中运行App过程中如果发生程序崩溃,会生成一个崩溃日志文件。这个文件会保存的特定系统目录下,扩展名是crash。当手机连接到iTunes时,会将该文件同步到电脑上。

在Mac系统中这些文件会同步到“~/Library/Logs/CrashReporter/MobileDevice”下。

而在Windows系统中会同步到“C:\Users\\AppData\Roaming\Apple computer\Logs\CrashReporter/MobileDevice”(Vista或以上)或“C:\Documents and Settings\\Application Data\Apple computer\Logs\CrashReporter”(XP)。

崩溃日志的上传

iOS中崩溃日志是可以上传的App Store的服务器,并由开发者查看的。用户可以通过系统设置中的“通用-诊断与用量”来设定是否上传崩溃日志。同时开发者也可以通过捕获异常信号自己定制异常上报。

崩溃日志的格式

一般崩溃日志头部有如下字段

1
2
3
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x20000008
Crashed Thread:  0

其中Exception Type是异常类型,Exception Codes是异常代码。Crashed Thread指示异常的线程编号。上面表示Crash的线程编号是0(主线程的线程编号是0)。

看崩溃日志时一般要分两种情况,一种是内存、CPU的系统错误,如内存访问错误、除零异常等。另外一种是程序通过写代码抛出的异常,即代码中通过throw关键字抛出的异常。程序抛出的异常是可以捕获并处理的,如果没有捕获,就会Crash,并生成崩溃日志。这两种在日志中有一些细微的差别。

一般内存等系统异常Crash线程信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3624cf78 objc_msgSend + 16
1   QQYanChu                        0x0000d92a -[QYServerInterface connectionDidFinishLoading:] (QYServerInterface.m:328)
2   Foundation                      0x30d03c22 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 10
3   Foundation                      0x30c5b6d2 -[NSURLConnectionInternalConnection invokeForDelegate:] + 22
4   Foundation                      0x30c5b69c -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 192
5   Foundation                      0x30c5b5be -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 54
6   CFNetwork                       0x338077ee URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 186
7   CFNetwork                       0x337fc49e URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 418
8   CFNetwork                       0x337fc592 URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 662
9   CFNetwork                       0x337fc19c URLConnectionClient::processEvents() + 100
10  CFNetwork                       0x337fc0d2 MultiplexerSource::perform() + 150
11  CoreFoundation                  0x34dffacc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8
12  CoreFoundation                  0x34dff298 __CFRunLoopDoSources0 + 208
13  CoreFoundation                  0x34dfe03e __CFRunLoopRun + 646
14  CoreFoundation                  0x34d8149e CFRunLoopRunSpecific + 294
15  CoreFoundation                  0x34d81366 CFRunLoopRunInMode + 98
16  GraphicsServices                0x3607d432 GSEventRunModal + 130
17  UIKit                           0x31e77e76 UIApplicationMain + 1074
18  QQYanChu                        0x0000feea main (main.m:39)
19  QQYanChu                        0x00007ed4 start + 32

第一列是编号,表示堆栈中函数调用的嵌套顺序。最上面就是崩溃发生的函数,往下面看就可以看到我们的代码。第二列是堆栈中函数定义的位置,有的是在动态库或Framework中定义的,有的是我们的App定义的,如QQYanChu就是我们的App可执行文件,另外你还可以看到其他的动态库等,一般我们关注自己的QQYanChu的就行了。 如上面的例子就是在-[QYServerInterface connectionDidFinishLoading:] 这个调用中挂的。一般这个信息还会包含代码文件和说对应的行号,如上面红色部分就是说崩溃在QYServerInterface.m的328行。这就可以方便我们快速定位问题。

下面是程序抛出的异常的日志。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Last Exception Backtrace:
0   CoreFoundation                  0x3425929e __exceptionPreprocess + 158
1   libobjc.A.dylib                 0x33a2b97a objc_exception_throw + 26
2   CoreFoundation                  0x3425ce02 -[NSObject(NSObject) doesNotRecognizeSelector:] + 166
3   CoreFoundation                  0x3425b52c ___forwarding___ + 388
4   CoreFoundation                  0x341b2f64 _CF_forwarding_prep_0 + 20
5   QQYanChu                        0x000ef372 -[QYUser staticDataFetcher:fetchedData:] (QYUser.m:168)
6   QQYanChu                        0x001ee9f2 -[QStaticDataFetcher successWithData:] + 94
7   QQYanChu                        0x001efb44 -[QStaticDataFetcher sendDelegateMessageWithLocalData] + 220
8   Foundation                      0x39256a6a __NSFireDelayedPerform + 446
9   CoreFoundation                  0x3422e5da __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 10
10  CoreFoundation                  0x3422e28c __CFRunLoopDoTimer + 268
11  CoreFoundation                  0x3422cefc __CFRunLoopRun + 1228
12  CoreFoundation                  0x3419feb8 CFRunLoopRunSpecific + 352
13  CoreFoundation                  0x3419fd44 CFRunLoopRunInMode + 100
14  GraphicsServices                0x34f082e6 GSEventRunModal + 70
15  UIKit                           0x36de52fc UIApplicationMain + 1116
16  QQYanChu                        0x000fcfc0 main (main.m:39)
17  QQYanChu                        0x000ee4d4 start + 36
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x32f28350 __pthread_kill + 8
1   libsystem_c.dylib               0x3830311e pthread_kill + 54
2   libsystem_c.dylib               0x3833f96e abort + 90
3   libc++abi.dylib                 0x38e35d4a abort_message + 70
4   libc++abi.dylib                 0x38e32ff4 default_terminate() + 20
5   libobjc.A.dylib                 0x33a2ba74 _objc_terminate() + 144
6   libc++abi.dylib                 0x38e33078 safe_handler_caller(void (*)()) + 76
7   libc++abi.dylib                 0x38e33110 std::terminate() + 16
8   libc++abi.dylib                 0x38e34594 __cxa_rethrow + 84
9   libobjc.A.dylib                 0x33a2b9cc objc_exception_rethrow + 8
10  CoreFoundation                  0x3419ff1c CFRunLoopRunSpecific + 452
11  CoreFoundation                  0x3419fd44 CFRunLoopRunInMode + 100
12  GraphicsServices                0x34f082e6 GSEventRunModal + 70
13  UIKit                           0x36de52fc UIApplicationMain + 1116
14  QQYanChu                        0x000fcfc0 main (main.m:39)
15  QQYanChu                        0x000ee4d4 start + 36

可以看出相比系统异常日志中多出了Last Exception Backtrace字段。上面是线程0崩溃的,而线程0只调用的abort。这是我们要看Last Exception Backtrace这里的堆栈,这个堆栈是抛出异常时的线程当时的堆栈情况,这个信息才是有意义的。在我们程序抛出异常后,系统会执行一系列相关逻辑后调用abort异常结束程序。

符号化Crash

1、iphone连接到Mac

2、

3、

4、

iOS崩溃日志的分析相关推荐

  1. iOS 崩溃日志在线符号化实践

    1. 什么是符号化? 在日常开发中,应用难免会发生崩溃.通常,我们直接从用户导出来的崩溃日志都是未符号化或者部分符号化的,都是一堆十六进制内存地址的集合,可读性较差.未符号化或者部分符号化的崩溃日志对 ...

  2. 三次蓝屏对内核崩溃日志的分析记录

    下面的所有内容都是WinDBG的输出内容 //后跟的所有内容都是针对下一行具体项的具体解释 Microsoft ® Windows Debugger Version 6.12.0002.633 AMD ...

  3. ios崩溃日志收集_iOS崩溃与日志分析

    在iOS开发中经常需要靠记录日志来调试应用程序.解决崩溃问题等,整理常用的日志输出和崩溃日志分析. 最新更新:2018-11-30 基于CocoaLumberjack 的 Swift使用封装库 一.崩 ...

  4. iOS崩溃日志分析-b

    1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查 ...

  5. iOS崩溃日志符号化及NLP聚类实现

    在解决iOS应用线上崩溃时,我们通常要分析崩溃日志来定位原因.线上崩溃日志一般是未符号或部分符号化的日志,是一堆十六进制的内存地址集合,可读性比较差,这对解决问题几乎没有帮助.所以,我们首先需要先对崩 ...

  6. 遭遇Crash文件战:教你如何搞定iOS崩溃日志

    请叫我背景 最近在提交应用到App Store的时候,竟然被拒了两次.那时候心里的想法是,尼玛完蛋了,要被老板开除了,我是不是要失业了.于是乎那两周几乎毛脑子都是为什么Apple你这么狠心,我们明明相 ...

  7. 如何看iOS崩溃日志

    重点:Triggered by Thread这句话后边的线程号,快速定位问题出现在那个线程,是否是你的锅:Triggered by Thread所指的线程表示导致异常.崩溃的线程 下边内容转自简书 简 ...

  8. ios崩溃日志收集_漫谈iOS Crash收集框架

    为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等.追求方便省心,对于保密性要求不高的程 ...

  9. iOS崩溃日志符号化 UUID获取

    1. 符号表是什么? 符号表就是指在Xcode项目编译后,在编译生成的二进制文件.app的同级目录下生成的同名的.dSYM文件. .dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地 ...

最新文章

  1. 不满你说,我最近跟Java源码杠上了...
  2. MySQL主键(PRIMARY KEY)
  3. Windows内存的一些知识点
  4. FastDFS_install_document_detail
  5. JAVA 查找某个目录是否存在,如果存在,打印出来
  6. neatdm路径_扫地机还能这么玩 延时摄影看路径规划
  7. 简便 or 缺陷?Python 内置函数大揭秘!| 技术头条
  8. 前端技术栈---Vue(1)安装与初始化
  9. php之使用file_get_contents对百度orc进行文字识别(二维码识别同理)--base64编码方式(解决image format error)
  10. shell脚本语法教程
  11. 手机wps怎么设置打印横竖_WPS中横竖打印怎么设置
  12. bandzip屏蔽广告
  13. OAuth 2.0 授权认证详解
  14. 新人报道,请多多关照。
  15. 如何导出计算机硬盘重数据,硬盘对拷教程,100%保存原硬盘数据
  16. php开启sockets模块,wdlinux 增加php的sockets模块
  17. 到底要学前端还是后端?
  18. [渝粤教育] 中国传媒大学 计算机组成原理 参考 资料
  19. 扒一扒流量攻击那些事
  20. muduo C++网络库的学习笔记

热门文章

  1. metro 磁贴拖拽 html,”Metro UI之磁贴(二)
  2. 现代银行集中式业务系统及数据整合
  3. yolo源码解析(1):代码逻辑
  4. 教你用一个Json做一个App,移动应用开发框架
  5. 1x9 Dual SC Optical Transceivers
  6. RIP的概念与技术指标
  7. CSP、NOI 等比赛的数据重定向要求 ← freopen、fclose
  8. 电子信息工程专业毕设题目选题推荐
  9. 一周AI要闻|AI博士年薪涨到80万 英伟达中国秀肌肉 特斯拉降价
  10. 用Python+WechatPCAPI实现微信消息防撤回