原文链接:http://blog.csdn.net/openglnewbee/article/details/38824139
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开发中会碰到的很多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.
今天就先到这里,希望对大家有所帮助。
分享到:
相关推荐
当release的版本 crash的时候,会有一个日志文件,包含出错的内存地址, 使用symbolicatecrash工具能够把日志和dSYM文件转换成可以阅读的log信息,也就是将内存地址,转换成程序里的函数或变量和所属于的 文件名.
iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件, 这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数...
分析ios crash 的工具,亲测系统版本10.11.4以下可用
DSYM 分析工具 DSYM 分析工具分析ios crash 的工具,亲测系统版本10.11.4以下可用
首先检查文件是否存在,命令行文件(默认情况下提供命令行文件),dsym文件(手动选择dsym文件并记录路径以方便下次自动选择),崩溃日志文件(手动选择日志文件并方便记录子自动选择),设置输出文件路径(手动选择...
crash-for-ios 只需将crash的文件和crash文件对应的app二进制包以及dsym文件放入到同一个文件夹下,然后在命令行中刚进入改文件夹,运行python脚本crash.py即可。
iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件, 这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数...
方法一 symbolicatecrash ...3、将crash文件、symbolicatecrash、dSYM拷贝到同一个目录下 4、导出DEVELOPER_DIR环境变量 export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer 这个行不执行
1.1、查找符号表 1.2、上传对应版本的 dSYM 文件 1.2.2、通过报表上传 dSYM 文件 1.2.3、命令行上传符号表 1.2.4、配置用户自定义附
在 iOS 中,当应用程序并行编译 lldb 编译器时,会将所有调试符号以及内存足迹复制到扩展名为 .dSYM 的调试符号文件中。 每次编译app时都会创建这个符号文件,生成的符号文件和之前生成的文件不一样。 这就是为什么...
1.dSYM你是如何分析的? 2.多线程有哪几种?你更倾向于哪一种? 3.单例弊端? 4.如何把异步线程转换成同步任务进行单元测试? 5.介绍下App启动的完成过程? 6.比如App启动过慢,你可能想到的因素有哪些? 7.0x8badf...
Symbolicator 非常易于使用:只需选择一个 .crash 文件,为报告崩溃的构建选择 .dSYM 文件,然后单击“Symbolicate”按钮。 Symbolicator 将在文本视图中向您显示符号化的崩溃报告,然后您可以选择将其导出为 .crash...
曾经遇到过表示 Mac 或 iOS 应用程序崩溃... 您将需要崩溃报告 (.crash)、原始二进制可执行文件和一个 .dSYM 符号文件。 此应用程序使用 Atos 为您象征崩溃报告。 可以在找到有关这种手动符号化方法的更多详细信息。
MacSymbolicator:轻松地象征macOSiOS崩溃报告