iOS Crash日志符号化

1.为什么要符号化:
IOS程序在真机运行程序出现crash状况时,机器会自动产生log文件,它包含了在程序crash之前的运行逻辑,分析carsh文件,有效的解决程序在真机上的问题,保证程序良好的稳定性,但是这个crash文件多数是显示出现问题的地址和一些系统的消息,无法查看程序中对应的崩溃地点。所以需要符号化转化为我们熟悉的代码方便定位问题。
xxx.crash的原日志:

0 libsystem_kernel.dylib 0x32a50dfc __pthread_kill + 8
1 libsystem_pthread.dylib 0x32aced33 pthread_kill + 59
2 libsystem_c.dylib 0x329f0905 abort + 73
3 libsystem_c.dylib 0x329d0365 __assert_rtn + 89
4 --             0x002d745d ‘‘‘0x4000‘‘‘ + 2962525
5 --             0x0021b75b ‘‘‘0x4000‘‘‘ + 2193243
6 --             0x0021af7d ‘‘‘0x4000‘‘‘ + 2191229
7 Foundation 0x25903d6b __NSThreadPerformPerform + 383
8 CoreFoundation 0x24bb9d55 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13
9 CoreFoundation 0x24bb9163 __CFRunLoopDoSources0 + 215
10 CoreFoundation 0x24bb77c9 __CFRunLoopRun + 769
11 CoreFoundation 0x24b053bd CFRunLoopRunSpecific + 473
12 CoreFoundation 0x24b051cf CFRunLoopRunInMode + 103
13 GraphicsServices 0x2bebd0a5 GSEventRunModal + 133
14 UIKit 0x28114f9d UIApplicationMain + 1437
15 --             0x00350615 0x4000 + 3458581
16 libdyld.dylib 0x3298aaad start + 1

符号化后:
0 libsystem_kernel.dylib 0x32a50dfc __pthread_kill + 8
1 libsystem_pthread.dylib 0x32aced33 pthread_kill + 59
2 libsystem_c.dylib 0x329f0905 abort + 73
3 libsystem_c.dylib 0x329d0365 __assert_rtn + 89
4 --             0x002d745d -‘‘‘[Middleware fundOpenInfo:]‘‘‘ + 3637
5 --             0x0021b75b -‘‘‘[FundInfoController setInfoData:]‘‘‘ + 135
6 --             0x0021af7d -‘‘‘[FundInfoController onSkyReceive:]‘‘‘ + 421
7 Foundation 0x25903d6b __NSThreadPerformPerform + 383
8 CoreFoundation 0x24bb9d55 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13
9 CoreFoundation 0x24bb9163 __CFRunLoopDoSources0 + 215
10 CoreFoundation 0x24bb77c9 __CFRunLoopRun + 769
11 CoreFoundation 0x24b053bd CFRunLoopRunSpecific + 473
12 CoreFoundation 0x24b051cf CFRunLoopRunInMode + 103
13 GraphicsServices 0x2bebd0a5 GSEventRunModal + 133
14 UIKit 0x28114f9d UIApplicationMain + 1437
15 --             0x00350615 main (main.m:18)
16 libdyld.dylib 0x3298aaad start + 1

显然,符号化后能够精确的定位到代码级的崩溃语句。

2.符号化crash日志需要3样东西:

1).crash日志本身(如:example.crash)

1/可以从iTunes Connect(Manage Your Applications – View Details – Crash Reports)获取普通用户的crash日志
2/自己的手机可以连接到iTunes同步后,在电脑中查看crash文件。

2).crash日志所对应的.app包(如:example.app)
如果你有的是.ipa包,你可以解压后在Payload/文件夹下获得.app包

3).crash日志多对应的.dSYM包
.app必须和.dSYM对应(打包为xcarchive时,同时产生)。

将上面三个文件放在同一个文件目录下面:

3.symbolicatecrash是xcode自带的工具,为了方便调用,可以做一个快捷方式,方便在任意路径下调用

首先在termail下,输入:

find /Applications/Xcode.app -name symbolicatecrash -type f

用来查找symbolicatecrash的真实位置。

(这个位置会随着系统的更新,系统修改)

以我的机器为例,会返回如下路径:

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

下一步建立快捷方式:

sudo ln -s /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin/symbolicatecrash

4.使用symbolicatecrash

在termail下,进入包含xxx.crash xxx.app xxx.dSYM的文件夹目录
symbolicatecrash xxx.crash xxx.app > crash.log

如果遇到 "DEVELOPER_DIR" is not defined 的报错,执行以下命令:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

得到符号化后的文件。

时间: 2024-10-18 03:37:19

iOS Crash日志符号化的相关文章

iOS Crash 分析 符号化崩溃日志

参考: 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 未符号化的崩溃日志就象一

iOS Crash日志

Understanding Crash Reports on iPhone OS https://developer.apple.com/videos/wwdc/2010/?id=317 http://www.cnblogs.com/smileEvday/p/Crash1.html http://www.cocoachina.com/industry/20130725/6677.html http://www.cnblogs.com/tiechui/p/3820044.html (http://

ios crash 日志分析

以下内容来自网络 https://coderwall.com/p/ezdcmg/symbolicating-an-ios-crash-log-without-the-original-dsym-file http://blog.csdn.net/jasonblog/article/details/19031517#0-tsina-1-77321-397232819ff9a47a7b7e80a40613cfe1 http://www.cocoachina.com/industry/20140514

IOS崩溃日志解析(crash log)

IOS的应用程序少不了crash,互联网统计分析工具友盟有一项目错误分析的功能,专门用于应用程序崩溃日志统计,最近研究友盟上统计到的崩溃日志,在此对崩溃日志做一个简单的总结. IOS崩溃日志分类: 一.低内存崩溃:IOS设备检测到低内存时,虚拟内存系统发出通知请求应用释放内存.这些通知发送到所有正在运行的应用和进程,试图收回一些内存.如果内存使用依然居高不下,系统将会终止后台线程以缓解内存压力.如果可用内存足够,应用将能够继续运行而不会产生崩溃报告.否则,应用将被iOS终止,并产生低内存崩溃报告

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

iOS Crash 分析(文三)- 符号化崩溃日志 未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了.所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字.这一步我们称之为符号化. 在iOS Crash分析(文一)中已经提到过符号化的两种方式: 1.利用Xcode符号化 2.利用symbolicatecrash脚本符号化 其实这两种分析方式都使用了同一个工具符号化:***atos***. atos是苹果提供的符号化工具,在Mac OS系统下默认安装. 使用***atos***符

分析iOS Crash文件:符号化iOS Crash文件的3种方法

转自:http://www.cocoachina.com/industry/20140514/8418.html 转自wufawei的博客 当你的应用提交到App Store或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文件 你的应用应当有模块能够在应用程序crash的时候上传crash信息. 要么通过用户反馈拿到crash文件,要么借助自己或第3方的crash上传模块拿到crash文件. 今天要分析的场景是你拿到用户的.crash文件之后,如何

iOS-----分析iOS Crash文件:符号化iOS Crash文件的3种方法

iOS Crash 分析(文一)- 开始 1. 名词解释 1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID.目的是为了唯一识别这个文件. 2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查看可执行文件件或库文件的UUID 3. symbolicatecrash 一个苹果提供的脚本.可以将crash日志符号化为可读的堆栈信息. 4. atosl 苹果提供的命令行工具,可以将crash的base_address和load_address转化为可读的堆

iOS Crash 分析(文二)-崩溃日志组成

iOS Crash 分析(文二)-崩溃日志组成 现在我们看一个淘宝iOS主客崩溃的例子: ### 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-87

iOS应用的crash日志的分析基础

iOS应用的crash日志的分析基础 分类: iOS  |  作者: jasonblog 相关  |  发布日期 : 2013-06-22  |  热度 : 11° Outline 如何获得crash日志 如何解析crash日志 如何分析crash日志      1. iOS策略相关      2. 常见错误标识      3. 代码bug 一.如何获得crash日志 当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上.这份crash日志记录着应用程序崩溃时的信息,通常包含着每