Flutter开发HarmonyOS鸿蒙Next应用的时候flutter build hap --debug编译成功但是lib目录下的so文件中不包含debug信息

Flutter开发HarmonyOS鸿蒙Next应用的时候flutter build hap --debug编译成功但是lib目录下的so文件中不包含debug信息
【任务描述】 flutter build hap --debug,编译成功,但是lib目录下的so文件中不包含debug信息。这是为什么? 【解决方案】

【任务来源】

7 回复

需要配置关闭strip,

在项目 build-profile.json5 文件的

buildOption 节点中增加如下配置

{
  "apiType": "stageMode",
  "buildOption": {
    "nativeLib": {
      "debugSymbol": {
        "strip": false,
      }
    }
  },
  "buildOptionSet": [
  ],
  "targets": [
    {
      "name": "default"
    },
    {
      "name": "ohosTest",
    }
  ]
}

更多关于Flutter开发HarmonyOS鸿蒙Next应用的时候flutter build hap --debug编译成功但是lib目录下的so文件中不包含debug信息的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


你好,感谢回复。 我修改了项目目录下ohos\entry\build-profile.json5文件内容,但是flutter build hap --debug编译后生成的so文件仍然是stripped,这是为什么?

你是说 libflutter.so ?这个strip版本需要自己本地编译引擎出包。

请问本地编译引擎出包是什么意思?具体应该怎么做?

参考:https://gitee.com/openharmony-sig/flutter_engine

PS:不了解本地编译引擎,你要debug包做什么?

在使用 Flutter 开发 HarmonyOS 鸿蒙 Next 应用时,如果你发现 flutter build hap --debug 编译成功,但生成的 .so 文件中不包含调试信息,这可能是由于以下几个原因导致的:

1. 构建配置问题

  • 确保你在 flutter build hap --debug 时,Flutter 正确地识别了 --debug 标志,并且生成了带有调试信息的二进制文件。
  • 检查 flutter doctor 的输出,确保 Flutter SDK 和 HarmonyOS 工具链都配置正确。

2. 编译器优化选项

  • 在调试模式下,编译器通常会生成带有调试信息的二进制文件。然而,某些编译器优化选项可能会剥离调试信息。检查构建脚本或配置文件,确保没有启用诸如 -O2-O3 等优化选项,这些选项可能会移除调试信息。
  • 你可以尝试在 CMakeLists.txt 或构建配置文件中显式地添加 -g 选项,以确保编译器生成调试信息。

3. 构建工具链问题

  • 确保你使用的构建工具链支持生成带有调试信息的 .so 文件。某些工具链可能默认不生成调试信息,或者需要特定的配置。
  • 检查构建日志,确认是否在编译过程中生成了调试信息。调试信息通常由 -g 编译器选项生成。

4. 剥离调试信息

  • 在某些情况下,构建系统可能会在生成 .so 文件后自动剥离调试信息。检查构建脚本,确保没有在生成 .so 文件后运行 strip 或其他剥离调试信息的工具。

5. Flutter 和 HarmonyOS 集成问题

  • Flutter 与 HarmonyOS 的集成可能仍在发展中,某些功能可能尚未完全支持。确保你使用的是最新版本的 Flutter 和 HarmonyOS 工具链。
  • 如果问题仍然存在,可以尝试在 Flutter 官方论坛或 GitHub 上提交问题,寻求官方支持。

6. 手动验证调试信息

  • 你可以使用 objdumpreadelf 等工具手动验证 .so 文件中是否包含调试信息。例如:
    objdump -g your_library.so
    
    或者:
    readelf --debug-dump your_library.so
    
    这些命令会显示 .so 文件中的调试信息。如果输出为空,则说明调试信息可能已被剥离。

7. 检查构建输出目录

  • 确保你正在检查正确的 .so 文件。在调试模式下,生成的 .so 文件可能位于不同的输出目录中。检查构建输出目录,确认你正在查看的是带有调试信息的 .so 文件。

8. 重新编译

  • 有时,构建系统可能会缓存某些编译结果,导致调试信息未被正确生成。尝试清理构建缓存并重新编译:
    flutter clean
    flutter build hap --debug
回到顶部