You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel中使用--fission生成分离的调试信息

Bazel + GCC 下--fission不生成分离调试符号的解决办法

问题根源

Bazel默认的GCC工具链没自动配置fission所需的编译/链接参数,光加--fission=yes命令行选项没用,得手动补上编译器层面的参数。

修复步骤

1. 修改BUILD文件,添加编译链接参数

给你的cc_binary目标加上copts和linkopts,指定GCC生成分离调试符号的参数:

cc_binary(
    name = "hello-world",
    srcs = ["hello-world.cc"],
    copts = ["-g", "-gsplit-dwarf"],  # 生成.dwo分离调试文件
    linkopts = ["-g", "-Wl,--gdb-index"],  # 生成gdb索引,优化调试体验
)

2. 正确执行构建命令

用调试模式构建,加上--fission=yes和--output_groups=+dwo确保输出分离的调试文件:

bazel build -c dbg --fission=yes --output_groups=+dwo //main:hello-world

--output_groups=+dwo是关键,不然Bazel默认不会把.dwo文件复制到bazel-bin目录里。

3. 验证结果

去bazel-bin/main目录下检查:

  • 运行file hello-world,会显示二进制包含调试信息但符号已分离
  • 能找到对应的hello-world.dwo文件,这就是分离出来的调试符号

4. 全局配置(可选)

如果所有目标都要开fission,可以写个自定义工具链配置文件(比如toolchain.bzl),把-gsplit-dwarf这类参数全局加上,不用每个BUILD文件重复配置。

补充说明

  • Bazel的--fission选项只是开关后端逻辑,真正生成分离符号还是靠GCC的-gsplit-dwarf参数
  • 旧issue里的workaround是针对老版本Bazel的,7.2.1得结合显式编译参数才能生效

内容的提问来源于stack exchange,提问作者PgN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:25:05