# 三方库源码调试

三方共享包分为静态共享包HAR和动态共享包HSP，两种共享包的源码调试方式有所区别，具体请查看以下指导。

## 区分字节码HAR和源码HAR

HAR包分为字节码HAR和源码HAR，同时满足以下两个条件的是字节码HAR，否则是源码HAR，更多关于如何构建源码HAR和字节码HAR的指导请查看[构建HAR](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-build-har)。

1. 查看HAR包的ets目录下存在.abc文件。
2. 查看HAR包的oh-package.json5文件，存在byteCodeHar字段并且值为true。 ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/df/v3/fR5u4xt9TFmE0cWkfhF48A/zh-cn_image_0000002701822724.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=A43F63B338FB0FC57EA10BEC6D41186EA8C1CDDA62ECDA5D39ED3C5C50728964)

## 字节码HAR调试

### C++代码调试

如果HAP/HSP引用字节码HAR包，同时HAR包中包含C++代码，参考以下步骤对该HAR包进行调试。

1. 点击**Run > Edit Configurations > Debugger** **>** **Symbol Directories** 页签，点击**+** ，添加带调试信息的so文件，so文件在{ProjectPath}/{ModuleName}/build/{product}/intermediates/libs/default/arm64-v8a路径下。 说明
   >
   > 在工程级或模块级build-profile.json5中添加strip字段并设置为false，可以生成带调试信息的so文件，具体请参考[配置CPP](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-cpp#section2182144382320)。

   ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e/v3/J3YPm2XySFmSU8d4QEvz-Q/zh-cn_image_0000002701662802.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=FC9ED17AA8583A60B961BB583B73D454DF80CF01875F3683A6526D50849EF0D2)
2. DevEco Studio调试应用时会优先加载配置的so文件，本地so文件包含调试信息时，可以正常调试源码。由于so的源码文件信息为编译时的文件路径，若与本地的源码文件路径不一致时，需要关联源码文件，有两种方式：
   * 方式一：可以在**LLDB Startup Commands** 页签中添加命令做映射，示例如下。

     ```screen
     settings set -- target.source-map {old-path} {new-path}
     ```

     * old-path：编译时的文件路径。
     * new-path：本地的源码文件路径。

     ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/85/v3/Mncef8dnSsy632xhU6SlAA/zh-cn_image_0000002731542003.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=9795589D1C0A2239F47B4E66D9ABF6EAA39BF979E83C8F98AA0C4AC3FD04C37A)
   * 方式二：当Step Into进入汇编代码后，会弹出源码关联的提示，请点击**Select file** ，选择本地对应C++源码进行关联。

     ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7d/v3/7eV2K5jGSx6gF2WWfWZMQw/zh-cn_image_0000002731382035.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=60FB16DF60182B4FE224A188A8AB925DA36CADB8C28CDDD688DF771EC11DAEEB)

### ArkTS代码调试

假如在工程A（HAR包工程）中以debug模式编译得到字节码HAR包，工程B（主工程）中引用该字节码HAR包，并且本地有HAR包的源码，要调试该字节码HAR，有两种方式：在主工程中调试或在HAR包工程中调试。
> 说明
>
> release模式编译的字节码HAR不支持调试。

* **方式一：在主工程中调试。**
  1. 在主工程中导入字节码HAR对应的模块，确保模块的层级目录与HAR包工程的保持一致，例如HAR模块都在工程根目录下。 ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/91/v3/0KAChRacS1qsP1-v2ZcvNQ/zh-cn_image_0000002731542007.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=D28FD926742817BC49813A39F47B52B51102974B1C5A6C74FE68600181F45DA7)

  2. 导入成功后，由于debug模式编译的字节码HAR中包含[sourceMap](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-exception-stack-parsing-principle)，调试时默认会关联当前工程的源码，此时可以在HAR模块上直接添加断点。
* **方式二：在HAR包工程中调试，** **通过修改前缀配置进行attach调试。**
  1. 在HAR包工程新建一个entry类型的demo主模块，如果主模块已存在则跳过本步骤。
  2. 在demo主模块的oh-package.json5中配置对字节码HAR包的依赖。

     ```json5
     // demo主模块的oh-package.json5
     "dependencies": {
       "@ohos/test_stage_ets_library": "file:./lib/test_stage_ets_library.har",
     }
     ```

     > 说明
     >
     > 如果在demo主模块的oh-package.json5中，配置对字节码HAR模块的依赖，如file:../test_stage_ets_library，调试时可能导致断点无效。
  3. 在HAR包工程主模块中调用HAR模块的接口，确保编译后主模块的sourceMap文件中包含HAR模块的相关信息。
  4. 构建HAR包工程，打开主模块的sourceMap，根据HAR的oh-package.json5中的name进行查找，将Index文件的前缀路径记录为localUrl，例如以下的demo|test_stage_ets_library|1.0.0。 ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/42/v3/XhnJOgOUT-OZlytaLuoDkg/zh-cn_image_0000002701662806.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=26CD4D138364C729692D6B01F333A34217585C3D2BA929F2AE75E9B239C02555)

  5. 主工程应用在设备上运行起来后，在HAR包工程中通过attach方式对该应用进行调试，在Debug窗口获取程序加载时的前缀，记录为remoteUrl，例如以下的entry|@ohos/test_stage_ets_library|1.0.0。 ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/94/v3/qp9jyztoQbWZI_RA_UL1Cw/zh-cn_image_0000002731382031.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=22F310BE1D7D243BE9CDA867F393B3F52EE81B930D11C6F239E206B2228FB9AA)

  6. 点击**Run > Edit Configurations > Debugger** **> ArkTS Source Pairs** ，点击**+** ，填写前两个步骤获取到的**remoteUrl** 和**localUrl** 。
     * remoteUrl：应用程序加载HAR包的前缀路径。
     * localUrl：本地生成sourceMap中HAR的前缀路径。

     ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ec/v3/cvZ8m-baTnyH8uSwB39LIw/zh-cn_image_0000002701822722.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=2E4D555B5263829CB2A7972336387F029FE5599AB4FD939C6DF02D6040EC9A8C)
  7. 在HAR包工程中重新通过attach方式对主工程应用进行调试，此时可以在HAR模块上添加断点进行调试。 ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ff/v3/jqTcTO8gR8-l_QU2UodCEw/zh-cn_image_0000002731382029.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=1A26011ABEE7A26682339410D864D90E43590D3A6E2E8B76E1203499962EA7C9)

  > 说明
  >
  > 如果在HAR包工程中同时配置[Symbol Directories](#section177418333199)和ArkTS Source Pairs，可同时attach调试ArkTS和C++断点。

## 源码HAR调试

### C++代码调试

如果HAP/HSP引用源码HAR包，同时HAR包中包含C++代码，可参考[字节码HAR](#section177418333199)进行调试。

### ArkTS代码调试

工程中引用源码HAR包，对该HAR包进行调试，根据本地是否有源码，调试方式分别如下：

* 如果HAR包在本地没有对应源码，此时应用构建打包时引用的源码来源是工程级oh_modules目录下的源码，只能针对oh_modules下的源码进行调试。 ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/0f/v3/45gkdSHbTSmIkaq0MFAFNA/zh-cn_image_0000002701662810.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=5FEEFC3A9BE0BF70ECF7B13C10B0DBD025D61C98AD041D7770FF08093AEDA895)

* 如果HAR包在本地有对应源码，调试时可关联本地源码以实现对源码的调试，有两种方式。
  * 方式一：参考[字节码HAR调试](#section1035165781918)。
  * 方式二：当Step Into进入oh_modules中的ets代码后，会弹出源码关联的提示时，请点击**Choose Sources** ，选择本地对应ets源码进行关联。

    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/63/v3/EWpWCaAxTyObePdVWSY48A/zh-cn_image_0000002701822728.png?HW-CC-KV=V1&HW-CC-Date=20260928T063033Z&HW-CC-Expire=31536000000&HW-CC-Sign=7FEAE1155264DD6867D037445A7946F0D29E8C7956B9A61D7C56F19CF23DE939)

## HSP源码调试

如果要调试HSP源码，需要将源码置于本地工程模块下，参考[字节码HAR的方式一](#li17359570194)进行调试。

