参考:

http://blog.csdn.net/diyagoanyhacker/article/details/41247367

http://blog.csdn.net/diyagoanyhacker/article/details/41247389

http://blog.csdn.net/diyagoanyhacker/article/details/41247411

http://www.cnblogs.com/smileEvday/p/Crash1.html

未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了。所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字。这一步我们称之为符号化。

/Library/Logs/CrashReporter  中的 Crash 报告文件

iOS Crash分析(文一)中已经提到过符号化的两种方式:

1.利用Xcode符号化
2.利用symbolicatecrash脚本符号化

其实这两种分析方式都使用了同一个工具符号化:***atos***。
atos是苹果提供的符号化工具,在Mac OS系统下默认安装。
使用***atos***符号化需要dsym文件。dsym文件是在编译工程的时候生成的,可以在Xcode Organizer的Archives标签栏下找到所有已归档的应用文件。它保存了编译过程的详细信息,其中包括符号信息。

注意: 你必需同时保留应用二进制文件和.dSYM文件才能将崩溃日志完整符号化。每次提交到iTunes Connect的构建都必需归档。
.dSYM文件和二进制文件是特定绑定于每一次构建和后续构建的,即使来自相同的源代码文件,每一次构建也与其他构建不同,不能相互替换。
如果你使用Build 和 Archive 命令,这些文件会自动放在适当位置。 如果不是使用Build 和 Archive命令,放在Spotlight能够搜索到的位置(比如Home目录)即可。

下面我们用***atos***对一条Crash进行符号化
还是看下面的例子:

### 1.进程信息 ###
Incident Identifier: E4201F10-6F5F-40F9-B938-BB3DA8ED7D50
CrashReporter Key: TODO
Hardware Model: iPhone4,1
Process: Taobao4iPhone [3538]
Path: /var/mobile/Applications/E3B51E77-D44D-4B3E-8767-B7DC2008D138/Taobao4iPhone.app/Taobao4iPhone
Identifier: com.taobao.taobao4iphone
Version: 4.8.1
Code Type: ARM
Parent Process: launchd [1] ### 2.基本信息 ###
Date/Time: 2014-09-16 21:39:30 +0000
OS Version: iPhone OS 7.1.2 (11D257)
Report Version: 104 ### 3.异常信息 ###
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0xa2400db3
Crashed Thread: 0 ### 4.线程回溯 ###
Thread 0 name: Dispatch queue: com.apple.main-thread ### 5.Crash调用堆栈 ###
Thread 0 Crashed:
0 libobjc.A.dylib 0x3838760c 0x38375000 + 75276
1 Taobao4iPhone 0x012c03e1 0x66000 + 19244001
2 Taobao4iPhone 0x012c054f 0x66000 + 19244367
3 Foundation 0x2e4de163 0x2e419000 + 807267
4 CoreFoundation 0x2dac9167 0x2da2a000 + 651623
5 CoreFoundation 0x2dac8d7f 0x2da2a000 + 650623
6 CoreFoundation 0x2dac711b 0x2da2a000 + 643355
7 CoreFoundation 0x2da31ebf 0x2da2a000 + 32447
8 CoreFoundation 0x2da31ca3 0x2da2a000 + 31907
9 GraphicsServices 0x3298b663 0x32982000 + 38499
10 UIKit 0x3037e14d 0x30310000 + 450893
11 Taobao4iPhone 0x0006b349 0x66000 + 21321
12 Taobao4iPhone 0x0006a5e8 0x66000 + 17896 Thread 1:
0 libsystem_kernel.dylib 0x38928808 0x38928000 + 2056
1 libdispatch.dylib 0x38869e03 0x3885f000 + 44547 ### 5.动态库信息 ###
Binary Images:
0x66000 - 0x19cdfff +Taobao4iPhone armv7 <43ebe409980f31fd9be165a64b002af5> /var/mobile/Applications/E3B51E77-D44D-4B3E-8767-B7DC2008D138/Taobao4iPhone.app/Taobao4iPhone
0x9fa9000 - 0x9fb4fff QuickSpeak armv7 <eda7aee380373fad88f17971512f2777> /System/Library/AccessibilityBundles/QuickSpeak.bundle/QuickSpeak
0x2c667000 - 0x2c669fff AXSpeechImplementation armv7 <fceb6d31f58d3c41afa9ace822d266a7> /System/Library/AccessibilityBundles/AXSpeechImplementation.bundle/AXSpeechImplementation

我从中选出一条调用进行符号化:

1   Taobao4iPhone                       0x012c03e1 0x66000 + 19244001

使用下面的命令符号化:

atos -arch armv7 -o "Taobao4iPhone.app.dSYM" -l 0x66000 0x012c03e1

结果:

1   Taobao4iPhone   0x012c03e1 -[TBSNSPagesContainerView subviewLayoutPage:] (in Taobao4iPhone) (TBSNSPagesContainer.m:227)

可以看到崩溃的类为TBSNSPagesContainerView,函数为subviewLayoutPage,文件名是TBSNSPagesContainer.m,行数是227行。

我们返回来看一下atos用法:

atos -o dysm文件路径 -l  模块load地址 -arch cpu指令集种类 调用方法的地址

dysm文件路径:可以在Xcode Organizer的Archives标签栏下找到所有已归档的应用文件。它保存了编译过程的详细信息,其中包括符号信息。
模块load地址:模块加载的基地址,可以在日志的***动态库信息***中找到对应模块的基地址。这里为0x66000
cpu指令集种类:可以为armv6 armv7 armv7s arm64。具体用哪个,可以参考对应模块的***动态库信息***中确定。如

0x66000 -  0x19cdfff +Taobao4iPhone armv7  <43ebe409980f31fd9be165a64b002af5> /var/mobile/Applications/E3B51E77-D44D-4B3E-8767-B7DC2008D138/Taobao4iPhone.app/Taobao4iPhone

那么Taobao4iPhone模块的cpu指令集为armv7

同样可执行程序,动态库可以相同操作,包含有符号链接信息.

不知为何atos -arch arm64 指令集时无法获取。

iOS Crash 分析 符号化崩溃日志的更多相关文章

  1. iOS----- Crash 分析(文三)- 符号化崩溃日志

    未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了.所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字.这一步我们称之为符号化. 在iOS Crash分析(文一)中已经提到过符号化的 ...

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

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

  3. iOS 中捕获程序崩溃日志

    iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼     iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...

  4. iOS获取用户设备崩溃日志并分析

    项目最近发布,部分用户在内侧使用,正好遇到一些问题,由于用户在其他城市,所以对于用户设备产生的崩溃日志,不好直接拿设备连接电脑. 对于这种情况,我们可以这样: 1.引导用户开启iOS设备设置-> ...

  5. iOS - 捕获应用程序崩溃日志

    作为一名iOS移动应用开发者,为了确保你的应用程序正确无误,在将应用程序提交到应用商店之前,你必定会进行大量的测试工作:而且在你测试的过程中应用程序运行的很好,但是在应用商店上线之后,还是有用户抱怨应 ...

  6. 使用dSYM分析App崩溃日志

    前言 我们在开发App过程中,因为连接到控制台,所以遇到问题会很容易找到问题代码.但是对于线上的App出现Crash的时候,我们不可能通过这种方式,也不现实,所以我们只能通过收集Crash信息,来解决 ...

  7. iOS 符号化崩溃日志

    1.获取一下三个文件   1. crash报告(.crash文件) 2. 符号文件 (.dsymb文件) 3. 应用程序文件 (appName.app文件,把IPA文件后缀改为zip,然后解压,Pay ...

  8. iOS开发-捕获程序崩溃日志

    iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...

  9. iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59)

    http://blog.sina.com.cn/s/blog_b71d24920101ky2d.html iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软 ...

随机推荐

  1. intel Skylake平台安装WIN7

    目前针对IntelSkylake平台安装WIN7时USB接口失灵的问题,不少硬件厂商都推出了免费修改工具来集成XHCI USB控制器驱动,这其中技嘉提供了一款Windows USB Installat ...

  2. ansible使用5-Variables

    变量命名 支持数字.字母.下划线 有效:foo_port, foo5 无效:foo-port, foo port, foo.port, 12 playbook定义 - hosts: webserver ...

  3. 在jupyter notebook 中同时使用安装不同版本的python内核-从而可以进行切换

    在安装anaconda的时候,默认安装的是python3.6 但是cs231n课程作业是在py2.7环境下运行的.所以需要在jupyter notebook中安装并启用python2.7版本 方法: ...

  4. express不是内部命令

    有时用npm install express -g安装完express时,在写express -v会显示express不是内部命令 这样的话如果自己的安装没有问题的话就要考虑到环境变量了 win7 P ...

  5. 用批处理设置 wifi 热点,复制保存成 bat 以管理员身份运行即可

    @echo offtitle Wifi 热点控制echo #注意:本文件需以管理员身份运行!# :Beginecho ========================echo 请选择操作:echo 1 ...

  6. Last_IO_Errno: 1062

    主键冲突的错误 1062   模拟错误:   在主库上操作: create table test100(id int not null,name varchar(20),primary key(id) ...

  7. framework7对日历的一些效果处理

    现在的要求是日历中要区分已打卡和未打卡的显示,并且当月只显示当月的日历状态,其他月份不显示状态,并且打卡的日期不能大于当日 实现代码(精确到天): HTML: <div class=" ...

  8. 【洛谷4459】[BJOI2018] 双人猜数游戏(动态规划)

    点此看题面 大致题意: 一直有两个数\(m,n\),已知\(s\le m\le n\),且\(Alice\)和\(Bob\)二个"最强大佬"各知道\(mn\)和\(m+n\).每轮 ...

  9. wcf 的 知识点

    1. wcf 的9种 协议

  10. keyframes 放大缩小动画

    本次项目中动画放大缩小代码小结 .fix .phone{ -moz-animation: myfirst 1s infinite; -webkit-animation: myfirst 1s infi ...