全部产品

符号表配置

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

背景信息

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

dSYM文件

是指在Xcode项目编译后,在编译生产的二进制文件.app的同级目录下生成的同名的.dSYM文件。.dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地址映射信息的中转文件,所有Debug的symbols都在这个文件中(包括文件名、函数名、行号等),所以也称之为调试符号信息文件。

一般情况下,Xcode项目每次编译后,都会生成一个新的.dSYM文件。因此,App的每一个发布版本,都需要备份一个对应的.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

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

操作步骤

  1. 登录崩溃分析控制台

  2. 在左侧导航栏选择设置>符号表

  3. iOS应用选择dSYM文件页签,Android应用选择应用Mapping文件页签和应用So文件页签。

  4. 单击文件上传,在上传弹窗中选择文件后,单击确定完成上传任务。