iOS 崩溃日志 Backtrace的符号化

iOS的崩溃日志配合dsym文件可以找到崩溃时的backtrace,这是解决崩溃的最重要的信息.

如果是在同一台mac上打包, 导入crash log时候会自动将backtrace符号化,可以看到方法名, 文件名和行号

但是,有时候发版的包不是在你的mac上打包的,xcode找不到对应的符号表, backtrace没能符号化如下所示:

Last Exception Backtrace:
0 CoreFoundation 0x2cb535f2 __exceptionPreprocess + 122
1 libobjc.A.dylib 0x3a3c5c72 objc_exception_throw + 34
2 CoreFoundation 0x2ca67152 -[__NSArrayM objectAtIndex:] + 226
3 myapp 0x004fe736 0x9b000 + 4601654
4 myapp 0x00507ed4 0x9b000 + 4640468
5 myapp 0x004fd112 0x9b000 + 4595986
6 myapp 0x003275c6 0x9b000 + 2672070

这里第二行可以看到是一个数组objectAtIndex抛出异常,但是3-6行的是来自应用自己的代码myapp, 这些信息才是最重要的.

其实,只要有原app文件,是可以将这些信息找到.

方法:

将对应版本的myapp.app文件和crash文件放在同一个文件夹下, 注意,一定要是该应用正确版本的app, 因为每次打包, 符号表的映射关系都有可能不同,如果不对应的话是没法符号化的.

然后运行

atos -arch armv7 -o myapp.app/myapp -l 0x9b000 0x004fe736

这个方法 -arch后面是指硬件架构:
iphone 1,2,3 是armv6
iphone4,4s 是 armv7
iphone5,5c是armv7s
iphone 5s, 6, 6+, 6s, 6s+ 是arm64

根据崩溃发生的设备来选择上述架构, myapp.app就是你的app的文件名, 选项l后面的两个16进制数是关键:
第一个数字,取backtrace的要解析的行的第4列, 第二个数字取第3列, 就会得到对应的方法名,文件名,行号.
这样,可以将上述3-6行中一行一行的解析出来,就能看到发生崩溃的地方,再进行分析就简单了.

时间: 2024-10-06 07:12:28

iOS 崩溃日志 Backtrace的符号化的相关文章

IOS崩溃日志解析(crash log)

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

常用获取Android崩溃日志和IOS崩溃日志的几种方法

一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:Android崩溃日志 一.通过adb logcat获取 # 清除日志,新手上路时,日志内容很多,对于能毕现的日志,可以先清除后重新获取 adb logcat -c # 然后再次运行崩溃操作,再抓取日志 # 存储日志到当前目录下的 carsh.log 中 adb logcat -d *:W > crash

iOS崩溃日志

今天看crash report ,有这样两个crash: 调用 stopUpdatingLocation 函数的是一个CLLocationManager 类型的对象,为什么报错的时候会把这个对象转成NSConcerteAttributedString类型? 调用getEsubmissionResult方法的是一个UIViewController类型的对象,为什么会转成_NSCFString类型? iOS崩溃日志 >> ios 这个答案描述的挺清楚的:http://www.goodpm.net/

ios 崩溃日志揭秘

http://www.raywenderlich.com/zh-hans/30818/ios%E5%BA%94%E7%94%A8%E5%B4%A9%E6%BA%83%E6%97%A5%E5%BF%97%E6%8F%AD%E7%A7%98 0x8badf00d: 读做 "ate bad food"! (把数字换成字母,是不是很像 :p)该编码表示应用是因为发生watchdog超时而被iOS终止的.  通常是应用花费太多时间而无法启动.终止或响应用系统事件. 0xbad22222: 该编码

iOS崩溃日志分析-b

1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查看可执行文件或库文件的UUID.示例: dwarfdump --uuid 应用名称.app/应用名称 dwarfdump --uuid 应用名称.dSYM 1.3. symbolicatecrash 苹果提供的命令行工具,可以将crash日志符号化为可读的堆栈信息.XCode6/XCode7版本中,

使用atos分析iOS崩溃日志

当APP出现崩溃时,一般会在XCode的Device界面里面出现崩溃日志,大概像这样: Incident Identifier: FBF87174-405D-4F1C-A745-E3D9F7858F4F CrashReporter Key: 31da19c0a9879bc6ca613ad7611c14ccebe2a82d Hardware Model: iPhone4,1 Process: MyProj [285] Path: /var/mobile/Applications/C6E9AF9C-

iOS崩溃堆栈信息的符号化解析

最近一段时间,在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就需要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是比较常见的.但在跟开发者沟通过程中,云捕小编发觉大家对iOS的应用符号表还不是很清楚. 现在网上有很多关于解析崩溃堆栈信息的符号化的博客,但是大多质量参差不齐,或者有些细节没有注意到.今天总结一下对iOS崩溃符号化的使用和技巧: 一.场景 当我们收集iOS的崩溃信息时,获取到的崩溃堆栈一般是如下的形式,全是十六进制的内

iOS崩溃日志 如何看

转载至搜狗测试 日志主要分为六个部分:进程信息.基本信息.异常信息.线程回溯.线程状态和二进制映像. 我们在进行iPhone应用测试时必然会在"隐私"中找到不少应用的崩溃日志,但是不会阅读对于很多人来说简直头疼.在此为大家详细介绍一下具体的阅读方法,希望大家可以更快的定位BUG.首先我们先看一下从iPhone中随机抽出的一个Crash日志: //1. 进程信息 Hardware Model: iPhone9,1 Process: com.sogou.sogouinput.BaseKey

iOS崩溃日志记录工具--CrashlyTics

http://try.crashlytics.com Crashlytics优势: 1.Crashlytics基本不会漏掉任何应用崩溃的信息 2.Crashlytics对崩溃日志管理很人性化,会根据崩溃次数排列优先级,也会显示相关崩溃信息(包括设备信息等) 3.可以定制发送到邮箱 Crashlytics安装及部署: 1.注册一个账号后,登录选择apple,进入下面页面 选择工程——>next 安装Crashlytics和Answers 按照提示流程,先增加一个Run Script Bulid P