iOS Crash 分析(文三)- 符号化崩溃日志
2016-09-07 12:07
441 查看
iOS 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
相关文章推荐
- iOS----- Crash 分析(文三)- 符号化崩溃日志
- iOS Crash 分析(文三)- 符号化崩溃日志
- iOS----- Crash 分析(文二)-崩溃日志组成
- iOS Crash 分析(文二)-崩溃日志组成
- 教你如何对ios崩溃(crash)日志做符号化
- iOS:crash崩溃日志分析
- iOS--崩溃日志的格式化分析---格式化crash日志
- iOS 崩溃日志符号化及分析
- iOS Crash 分析(文二)-崩溃日志组成
- iOS应用崩溃日志分析
- iOS应用崩溃日志分析
- 苹果官方文档:理解和分析ios应用崩溃日志
- iOS 崩溃日志 Crash Log 分析汇总
- iOS应用崩溃日志分析
- iOS应用崩溃日志分析
- iOS开发-应用崩溃日志分析(Crash Log)
- iOS应用崩溃日志分析
- iOS应用的crash日志的分析基础
- iOS崩溃日志分析
- 分析iOS Crash文件,使用命令符号化iOS Crash文件