符号表配置

将符号表文件上传到崩溃分析控制台,我们可以使用符号表文件解混淆崩溃调用栈,便于问题分析和解决。

背景信息

符号表配置分为dSYM文件应用Mapping文件应用So文件JS Mapping文件配置,各文件作用说明如下:

dSYM文件

一般情况下,Xcode项目每次编译后会生成一个.dSYM文件。App的每一个发布版本都会生成一个对应的.dSYM文件。.dSYM文件用于后续调试定位问题。

注意

项目每一次编译后,.app和.dSYM成对出现,并且二者有相同的UUID值,以标识是同一次编译的产物。

应用Mapping文件

对于Java语言,可以通过字节码反编译成Java代码。为了防止外部人员通过破解应用安装包来得到真实代码,我们常常使用proguard等混淆工具对Java代码进行混淆。混淆工具会使用随机字符串替换我们实际的方法和变量名,降低代码可读性,提供了一定的安全性。

同时为了方便开发人员排查问题,混淆工具也会生成一个mapping.txt文件,里面记录了真实代码到混淆代码的映射关系,只有通过mapping.txt对错误调用栈解混淆后,才能看到真实的出错堆栈。

应用So文件

C/C++代码编写的项目在编译之后,会同时生成一个包含函数和变量地址映射信息的debug so文件,该文件可以将机器码还原成C/C++代码。

为了使生成debug so带有buildId信息,我们需要在Android.mk文件中加上一行:

LOCAL_LDFLAGS += -Xlinker --build-id

此后,NDK构建的so文件将带有一个段(.note.gnu.buildid)专门存放构建的UUID。

查看so文件的UUID的一个方法如下(需要readelf或类似工具):

readelf -x .note.gnu.build-id libxxx.so

上传文件中存着这个应用包的符号表,我们可以根据崩溃日志和符号表文件来定位到崩溃的位置。

JS Mapping文件介绍

对于JavaScript文件,为了减小体积和提高传输效率,我们常常对JavaScript代码进行混淆。混淆工具会使用随机字符串替换实际的方法和变量名,这也同时降低了代码可读性。

为了方便开发人员排查问题,混淆工具也会生成一个*.js.map文件,里面记录了真实代码到混淆代码的映射关系,只有通过map对错误调用栈解混淆后,才能看到真实的出错堆栈。

操作步骤

  1. 在页面左侧导航栏,选择崩溃分析 > 符号表,打开符号表页面。

  2. iOS应用选择dSYM文件JS Mapping文件页签,Android应用选择应用Mapping文件页签、应用So文件JS Mapping文件页签。

  3. 单击文件上传,在上传面板中选择文件,单击确定,完成上传任务。