HarmonyOS NEXT 符号表

介绍Harmony符号表的基础概念,以及如何找到符号表并上传。

一、什么是符号表

1. SO 符号表

通常release的so会经过strip,strip后的so中的符号表、调试信息会被剥离。

image

对于鸿蒙Native Crash ,系统打印的堆栈无法看到代码行信息。

#00 pc 0000000000001a90 /data/storage/el1/bundle/libs/arm64/libnative_lib.so(ac31cd29c82e7fe217d52c64c299bb043881e400)

为了能快速准确帮用户定位Crash发生的代码位置,崩溃分析使用符号表对Crash堆栈进行解析还原。例如上面的堆栈还原之后:

CallCppCrash(napi_env__*, napi_callback_info__*) at(/src/main/cpp/napi_init.cpp:23)

2. Harmony 符号表(nameCache & sourceMaps 文件)

在构建Harmony HAP或者HAR包的时候,用户按照官方文档配置混淆,见ArtTS代码混淆

在构建 Harmony HAP和HAR包的时候,开发IDE 使用 nameCache.json 和 sourceMaps.json 记录混淆前后的符号、变量、代码行号映射关系。

崩溃分析在解析ArkTS堆栈的时候会使用应用版本匹配的nameCache.json和sourceMaps.json,来进行符号化操作。

重要

在上传符号表的时候,需要将nameCache.json和sourceMaps.json 打包成一个zip文件上传。

二、如何找到符号表

1. SO符号表位置

说明

为了方便找回Crash对应的Debug SO文件并还原堆栈,每一次发布HAP包的时候,请备份好Debug SO。

带debug信息的so数据,产物位置:

{ProjectPath}/{ModuleName}/build/{product}/intermediates/libs

配置方式请参考release编译带debug信息的so

image

2. nameCache & sourceMaps

说明

为了方便找回Crash对应的符号表文件并还原堆栈,每一次发布HAP包的时候,请备份好对应的 nameCache 和 sourceMaps 文件。

  • nameCache.json

    反混淆映射表,release模式编译产物,产物位置:

    {ProjectPath}/{ModuleName}/build/{product}/cache/default/default@CompileArkTS/esmodule/release/obfuscation

    image

  • sourceMaps.json

    release模式编译产物,产物位置:

    {ProjectPath}/{ModuleName}/build/{product}/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.map

    image

三、如何上传符号表

详见 网页上传符号表

四、FAQ

详见 符号表 FAQ