iOS crash符号化

工作中碰到crash是家常便饭,但怎么去分析crash,吃好这顿饭呢,我根据一些资料和自己的实践总结了下。

平时我们拿到的崩溃都是没有符号化的,都是二进制地址,如下图,我们要做的就是把它符号化,找到对应的崩溃代码。


符号化分两种情况,有发生崩溃的设备和没有设备的情况。

1、有设备

把设备接入电脑,在xcode->window->device and simulators->device->view device logs查到对应的崩溃日志,xcode会自动给你符号化,但可能符号话的效果没那么好,看下图


2、没有设备

没有设备的话,有两种方式去分析

i. 使用mac自带的symbolicatecrash工具

ii. 使用atos


下边分别讲下

i.使用mac自带的symbolicatecrash工具

a.找到symbolicatecrash的目录,执行命令

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


使用真机下的symbolicatecrash,即图中红框里的。

b. 拿到dSYM文件,这里保存着app的符号表,把dSYM文件和crash文件放到一个文件夹下,

首先需要确认crash文件和dSYM文件是同一个UUID的

查看dSYM文件的UUID如下

dwarfdump --uuid mtmap.app.dSYM 


查看crash文件的UUID,crash文件是设备的,只有一个arm架构

grep "mtmap arm64" *crash


配置环境变量

临时方案

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

永久方案

编辑 ~/.bash_profile(笔者用的是 zsh,所以这里编辑的是 ~/.zshrc),在末尾添加

# Add environment variable DEVELOPER_DIR export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer 

配置好环境后,执行命令

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash  ./*.crash ./*.app.dSYM > symbol.crash


ii. atos方式

atos需要dSYM文件和crash的地址。命令为

xcrun atos -arch 架构 -o 二进制包 -l 模块load地址(基地址) 调用方法的地址



你可能感兴趣的:(iOS crash符号化)