三方共享包分为静态共享包HAR和动态共享包HSP,两种共享包的源码调试方式有所区别,具体请查看以下指导。
HAR源码调试
HAR包的引用存在两个模式,对应的源码调试也有差异:
- attach调试时需要注意被调试应用的HAR包引用方式,需要保证本地工程引用HAR方式与被attach调试应用引用方式保持一致。
- CPP调试需要保证so文件附带调试信息,请参考build-profile.json5文件添加strip字段并设置为false。
- 引用方式1:引用本地工程的其他module。
"dependencies": {
"library": "file:../library",
} 源码调试:关联本地模块源码进行调试,此时在对应module源码上进行调试。
- 引用方式2:引用本地HAR包或引用ohpm仓中的HAR包。
"dependencies": {
"package": "file:./package.har",
} 源码调试:
- 如果HAR包在本地无对应源码,此时应用构建打包时引用的源码来源是oh_modules目录下的源码,只能针对oh_modules下源码进行调试。
- 如果HAR包在本地有对应源码,调试时可关联本地源码以实现对源码的调试。
- 关联本地源码方式一:
如果工程依赖了远程仓库的HAR包,本地也有相应的源代码,可以通过修改前缀配置进行attach调试。
如下图所示,工程依赖了远程HAR包(也可以是本地的HAR包)。

此时可以在Run/Debug Configurations中通过如下配置来进行attach调试。
点击Run > Edit Configurations > Debugger,点击
,填写remoteUrl和localUrl。
- remoteUrl:应用程序加载HAR包的前缀路径。
- localUrl:本地生成sourceMap中HAR的前缀路径。

remoteUrl和localUrl的获取方式如下:
由于本地HAR工程不会产生sourceMap,所以需要一个入口。通常是新建一个工程,将HAR的源代码作为本地模块进行依赖。

然后build工程生成新的sourceMap,打开sourceMap并找到本地源码的key值前缀,该前缀即为localUrl。

启动attach调试,在debug窗口获取程序加载时的前缀,该前缀即为remoteUrl。

配置完成后,再进行attach调试,此时便可在源码中断点命中及打断点。

- 关联本地源码方式二:
- ets源码关联使用方法:当Step Into进入oh_modules中的ets代码后,会弹出源码关联的提示时,请点击“Choose Sources”,选择本地对应ets源码进行关联。

- C++源码关联使用方法:当Step Into进入汇编代码后,会弹出源码关联的提示,请点击“Select file”,选择本地对应C++源码进行关联。

[h2]C++代码调试
- 如果HAP/HSP引用字节码HAR包,同时HAR包中包含C++代码,对该HAR包进行调试,在native调试配置界面中的Symbol Directories页签,点击“+”,添加带调试信息的so文件,so文件在{ProjectPath}/{ModuleName}/build/{product}/intermediates/libs/default/arm64-v8a路径下。

- DevEco Studio调试应用时会优先加载配置的so文件,本地so文件包含调试信息时,开发者可以正常调试源码。由于so的源码文件信息为编译时的文件路径,若与本地的源码文件路径不一致时,可以在LLDB Startup Commands页签中添加命令做映射,示例如下。也可以通过选择单个文件关联,具体请参考HAR源码调试。
settings set -- target.source-map {old-path} {new-path} - old-path:编译时的文件路径。
- new-path:本地的源码文件路径。

[h2]ArkTS源码调试
- 场景一:工程引用字节码HAR且导入该模块代码(确保模块与工程的层级目录和编译HAR包的工程保持一致),由于debug模式编译的字节码HAR中包含sourcemap,调试时默认会关联当前工程的源码,此时可以在HAR模块上直接添加断点。
- 场景二:字节码HAR是独立的工程,与HAP/HSP主工程(被调试应用)相互独立时,可以在HAR包对应工程上创建demo模块,demo模块对HAR包的引用方式和主工程对HAR包的引用方式保持一致,被调试应用启动后,在demo工程中通过attach方式对应用进行调试,此时可以在demo工程上添加断点。
- release模式编译的字节码HAR不支持调试。
- debug模式编译demo工程确保生成sourcemap产物。
- 引用工程外字节码har的应用,当本地源码所在工程Dual模式同时配置了Symbol Directories和Ets Source Pairs,可在本地源码工程同时attach调试ets及c++断点。