
项目中引入三方库后线上出问题想进源码看看却发现断点打不进去一、先分清字节码HAR vs 源码HARHAR 包分为字节码 HAR和源码 HAR判断标准是同时满足以下两个条件即为字节码 HAR否则是源码 HAR条件说明1查看 HAR 包的ets目录下存在abc文件2查看 HAR 包的oh-package.json5文件存在byteCodeHar字段并且值为true二、字节码HAR调试2.1 C代码调试如果 HAP/HSP 引用字节码 HAR 包同时 HAR 包中包含C 代码按以下步骤调试步骤1添加带调试信息的 so 文件点击Run Edit Configurations Debugger页签点击添加带调试信息的 so 文件so 文件路径[ProjectPath]/[ModuleName]/build/{product}/intermediates/libs/default/arm64-v8a说明在工程级或模块级build-profile.json5中添加strip字段并设置为false可以生成带调试信息的 so 文件。步骤2关联源码文件DevEco Studio 调试时会优先加载配置的 so 文件本地 so 文件包含调试信息时可以正常调试源码。但 so 的源码文件信息为编译时的文件路径若与本地的源码文件路径不一致需要关联源码文件有两种方式方式操作方式一在LLDB Startup Commands页签中添加命令做映射settings set -- target.source-map {old-path} {new-path}•old-path编译时的文件路径•new-path本地的源码文件路径方式二当Step Into 进入汇编代码后会弹出源码关联的提示点击Select file选择本地对应 C 源码进行关联2.2 ArkTS代码调试字节码 HAR 的 ArkTS 调试提供两种方式方式一在主工程中调试在主工程中导入字节码 HAR 对应的模块确保模块的层级目录与 HAR 包工程的保持一致例如 HAR 模块都在工程根目录下导入成功后由于 debug 模式编译的字节码 HAR 中包含sourceMap调试时默认会关联当前工程的源码此时可以在 HAR 模块上直接添加断点方式二在 HAR 包工程中调试通过修改前缀配置进行 attach 调试步骤操作1在 HAR 包工程新建一个entry 类型的 demo 主模块如已存在则跳过2在 demo 主模块的oh-package.json5中配置对字节码 HAR 包的依赖3在 HAR 包工程主模块中调用 HAR 模块的接口确保编译后主模块的 sourceMap 文件中包含 HAR 模块的相关信息4构建 HAR 包工程打开主模块的 sourceMap根据 HAR 的oh-package.json5中的name进行查找将Index 文件的前缀路径记录为localUrl5主工程应用在设备上运行后在 HAR 包工程中通过attach方式调试在 Debug 窗口获取程序加载时的前缀记录为remoteUrl6点击Run Edit Configurations Debugger ArkTS Source Pairs点击填写remoteUrl和localUrl7在 HAR 包工程中重新通过 attach 方式对主工程应用进行调试此时可以在 HAR 模块上添加断点进行调试步骤2的依赖配置示例// 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调试时可能导致断点无效。步骤6的两个 URL 含义字段含义remoteUrl应用程序加载 HAR 包的前缀路径localUrl本地生成 sourceMap 中 HAR 的前缀路径说明如果在 HAR 包工程中同时配置Symbol Directories和ArkTS Source Pairs可同时 attach 调试ArkTS 和 C 断点。三、源码HAR调试3.1 C代码调试如果 HAP/HSP 引用源码 HAR 包同时 HAR 包中包含 C 代码可参考字节码 HAR 的 C 调试方式进行调试。3.2 ArkTS代码调试工程中引用源码 HAR 包对该 HAR 包进行调试根据本地是否有源码调试方式分别如下情况一本地没有对应源码应用构建打包时引用的源码来源是工程级oh_modules目录下的源码只能针对oh_modules下的源码进行调试情况二本地有对应源码调试时可关联本地源码以实现对源码的调试有两种方式方式操作方式一参考字节码 HAR 调试的方式方式二当Step Into 进入oh_modules中的 ets 代码后会弹出源码关联的提示点击Choose Sources选择本地对应 ets 源码进行关联四、HSP源码调试如果要调试 HSP 源码需要将源码置于本地工程模块下参考字节码 HAR 的方式一进行调试建议首次调试三方库先按两个条件确认是字节码还是源码 HARArkTS 断点打不进去优先试方式一主工程直接打断点不行再走方式二配 Source PairsC 断点不生效检查strip是否设为falseso 路径对不对必要时用target.source-map映射依赖路径别写错用file://lib/xxx.har别用file:../xxx如果调试时发现断点显示为空心圆未绑定大概率是sourceMap 路径映射没对上重点排查remoteUrl和localUrl是否配置正确。