http://blog.csdn.net/hjy_x/article/details/20929095

重点是dwarfdump --uuid命令

我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是release环境包导致的crash,我们就需要一些特殊的手段来通过crash log进行分析定位了。

通过参考网上的一些资料,总结了一下,下面介绍一下通过dSYM文件以及crash log分析定位的方法。

1.导出crash log

通过Xcode的Organizer查看某台iphone设备的DeviceLog,选择需要的crash log,导出XXX.crash文件。

2.找到对应的app文件

找到当前iphone设备上安装的ipa文件,更改文件后缀名为zip,解压后得到Payload文件夹,你需要的app文件就在其中了。

3.找到对应build版本的dSYM文件

dSYM文件是iOS编译后保存16进制函数地址映射信息的文件,每次应用程序build后,都会生成对应的xxx.app, xxx.app.dSYM文件。

4.确定dSYM、app以及crash文件的关系

每一个xx.app, xxx.app.dSYM文件都拥有相应的uuid,crash文件也有uuid,只有三者uuid一至才表明之三者可以解析出正确的日志文件。
查看xx.app文件的uuid的方法,在terminal中输入命令:

dwarfdump --uuid xxx.app/xxx (xxx工程名)

查看xx.app.dSYM文件的uuid的方法,在terminal中输入命令:

dwarfdump --uuid xxx.app.dSYM (xxx工程名)

而.crash的uuid位于,crash日志中的Binary Images:中的第一行尖括号内。如:

armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>

将对应的xxx.app.dSYM文件以及xxx.app文件以及xxx.crash文件拷贝到同一文件夹中,如:~/Desktop/DebugLog。

5.通过symbolicatecrash分析crash文件

Xcode有自带的symbolicatecrash工具,可以通过dSYM文件将crash文件中的16进制地址转换成可读的函数地址。symbolicatecrash工具位于:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash(Xcode 4.5)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash(Xcode 5.0)

该文件是隐藏文件,可以通过如下命令查找并拷贝到系统目录下,并建立快捷方式。

1)打开终端,进入到symbolicatecrash工具所在的文件夹目录

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/

2)查找确认是否存在symbolicatecrash

ls -al | grep symbolicatecrash

3)将symbolicatecrash工具拷贝到/usr/bin目录下

sudo cp symbolicatecrash /usr/bin/symbolicatecrash

4)设置DEVELOPER_DIR系统变量

cd ~/

vi .bash_profile

并输入如下内容
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

保存并退出

source .bash_profile

5)重启终端,确认是否已正确设置DEVELOPER_DIR系统变量

echo $DEVELOPER_DIR

查看输出结果是否为/Applications/Xcode.app/Contents/Developer

6)查看PATH系统变量是否存在如下路径/usr/bin

echo $PATH

7)如果PATH不存在如下路径/usr/bin,可在~/.bash_profile中添加如下代码

export PATH="/usr/bin:$PATH"

保存并退出

source .bash_profile

8)上述准备工作完成后,进入dSYM和crash文件对应的文件夹目录,如

cd ~/Desktop/DebugLog

9)执行如下命令,即可正确解析crash文件

symbolicatecrash xxx.crash xxx.app.dSYM > test.txt

注意:symbolicatecrash的参数顺序,否则会报类似如下错误

Use of uninitialized value $data in substitution (s///) at /usr/bin/symbolicatecrash line 678.

Use of uninitialized value $data in substitution (s///) at /usr/bin/symbolicatecrash line 681.

Use of uninitialized value $data in substitution (s///) at /usr/bin/symbolicatecrash line 685.

Use of uninitialized value in pattern match (m//) at /usr/bin/symbolicatecrash line 404.

Use of uninitialized value in scalar assignment at /usr/bin/symbolicatecrash line 418.

No crash report version in XXX.app.dSYM/ at /usr/bin/symbolicatecrash line 954.

今天就先到这里,希望对大家有所帮助。

iOS通过dSYM文件分析crash相关推荐

  1. macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号

    一.使用流程 Windows下的程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃的具体位置,甚至可以对应到源代码的具体行数.macOS下的symbolicatecrash也具备相应的功能.对应 ...

  2. C++ 利用 windbg + dump + map + cod 文件分析 crash 原因

    目录 如何生成 dump 文件 如何生成 map 文件 VS生成 cmake 命令 如何生成 cod 文件 VS 生成 cmake 命令 找 crash 地址 step 1 step2 step3 附 ...

  3. 三、iOS逆向:文件分析工具安装

    设备环境: 硬件环境:iPhone6.0.Mac电脑Big Sur(M1 芯片). 软件环境:已破壳ipa.IDA_pro_for_mac.class-dump. 2. 软件简绍: 砸壳工具:Bfin ...

  4. IOS反汇编工具Hopper分析Crash Log

    2019独角兽企业重金招聘Python工程师标准>>> 在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使 ...

  5. iOS App崩溃日志分析

    APP新版本上线之前,一般都会经过测试团队的反复测试,确认无bug后才会发布.发布那刻作为开发人员的你,估计欣喜若狂吧,自豪吧!!.发布后线上运行好长一段时间,均安然无恙,可突然有一天你们家CEO说, ...

  6. iOS -- 友盟工具进行Crash分析/dsym文件

    项目中集成了友盟统计,自然Crash日志已经在友盟的统计之中,点击错误分析可以看到相关的错误列表,以及简单的crash日志. 如果想看详细的crash详情则需要使用友盟的错误分析工具:umcrasht ...

  7. iOS App 崩溃报告符号化,.ips崩溃报告文件分析

    iOS App 崩溃报告符号化,.ips崩溃报告文件分析 2014-09-22, Mon | 评论 本文为翻译整理.来源: Symbolicating iPhone App Crash Reports ...

  8. iOS线上APP崩溃(Crash)分析

    这两周一直在研究如何追踪线上的bug,如何快速分析出程序到底崩溃在什么地方,从底层了解Crash是如何产生的.如何传递的.以及是如何分析出来的.虽然项目组并没有对这些要求很严格,但是作为一个高级开发人 ...

  9. iOS 利用dSYM定位crash

    What is dSYM ? xCode 的每一次编译都会生成一个dsym文件,在其内部存储了16进制函数地址的映射. 在App实际执行的二进制文件中,是通过地址来调用方法,所以在App Crash ...

最新文章

  1. 保证同一个账号同时只能在一个设备上登录
  2. linux假延迟脚本,linux – 期望脚本期望错过发送字符串延迟问题
  3. Python:两个队列实现栈,两个栈实现队列
  4. mysql 导入主键冲突_MySQL 处理插入过程中的主键唯一键重复值的解决方法
  5. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm
  6. linux下make 文件写法之简单函数调用
  7. SQl---基础整理6--数据库的创建
  8. retorfit converter使用说明
  9. Codeforces Round #102 (Div. 1) D Help Shrek and Donkey 2
  10. 15.导入网表及status介绍[原创]
  11. flightgear基于udp用c++传输信息
  12. SpringBoot2.6.5整合CXF框架
  13. 添加WhatsApp链接教程
  14. 时间的质量:为什么时光飞逝
  15. 【xctf之easyphp】
  16. Java实例项目之投票统计(可拓展衍生)
  17. 使用Nginx Upstream 部署 OpenERP
  18. 搭载网站的云服务器需要空间备案,网站空间要备案吗
  19. 动漫美少女生成神器、猫的门禁...2019年十七大最佳机器学习项目 |年度盘点①...
  20. php中的where用法,ThinkPHP中where()使用方法详解

热门文章

  1. BLDC(直流无刷电机)反电动势测量/观测模型
  2. 华为手机隐藏的5个技巧,每一个值得收藏
  3. 百度云此链接内容可能涉及侵权,分享的文件已经被取消等屏蔽问题的解决方法
  4. 谢国忠正在走入一种非理性思维状态
  5. A brief introduction to complex analysis
  6. 为什么计算机编程以英语为主,为什么做编程都用英文,中文不行吗?听程序员解释完,总算明白了...
  7. 单电源运放全波整流电路
  8. macOS终端颜色的设定方法与说明:CLICOLOR与LSCOLORS
  9. Oracle中编码与字符转换
  10. 计算机维修套装推荐,工欲善其事,必先利其器---iFixit 54 Bit Driver Kit 维修工具套装...