iOS通过dSYM文件分析crash

转载 2015年07月09日 19:17:54


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日志

拿到crash之后大概是这个样子的 这个时候我们就需要进行解析。这里我介绍的是用symbolicatecrash进行解析。 首先是查找 symbolicatecrash所在的位置。我们需要打开终端...
  • jsjxiaobing
  • jsjxiaobing
  • 2016年04月27日 21:02
  • 1579

iOS通过dSYM文件分析crash

http://blog.csdn.net/hjy_x/article/details/20929095 我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们...
  • openglnewbee
  • openglnewbee
  • 2014年08月25日 18:07
  • 24135

通过dSYM和app文件分析Crash

一. 验证xxx.crash、xxx.app和xxx.dSYM的uuid是否一致 验证方法: 1)查看xxx.app的uuid       dwarfdump --uuid xxx.app/xxx...
  • sharpyl
  • sharpyl
  • 2015年12月04日 17:17
  • 1386

iOS - 命令行工具解析Crash文件,dSYM文件进行符号化

序 在日常开发中,app难免会发生崩溃。简单的崩溃还好说,复杂的崩溃就需要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是...
  • yuqingzhude
  • yuqingzhude
  • 2017年01月10日 16:17
  • 967

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

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

利用.dSYM和.app文件准确定位Crash位置

利用.dSYM和.app文件准确定位Crash位置
  • jinzhu117
  • jinzhu117
  • 2014年03月06日 11:38
  • 15131

dSYM,app,crash 文件 UUID 匹配

什么是 dSYM 文件Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译...
  • mtc1256
  • mtc1256
  • 2016年09月20日 15:59
  • 1272

Xcode自带工具symbolicatecrash解析iOS Crash文件

环境:Xcode8一、找到.app文件和.app.dSYM文件 在桌面创建一个crash文件夹,然后Xcode->Window->Organizer找到Archives找到App->右击Show in...
  • qq_26544491
  • qq_26544491
  • 2017年02月07日 14:00
  • 4268

友盟统计平台crash信息UUID与打包时生成.dSYM的UUID不一致

前言 在iOS应用的开发工作中,我们经常会用到一些开源的三方库或者一些三方服务,为了保证项目的稳定性,我们通常不会频繁的对项目中一些三方引用进行更新。一般情况下,只有在我们的项目中遇到一些由于三方依...
  • andanlan
  • andanlan
  • 2016年05月22日 17:48
  • 2122

apple appstore上线过程中 app crash的分析方法

apple appstore上线过程中 app crash的分析方法
  • jackyvan
  • jackyvan
  • 2016年03月12日 14:09
  • 862
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS通过dSYM文件分析crash
举报原因:
原因补充:

(最多只允许输入30个字)