【问题标题】:debug c++ application with bazel and gdb使用 bazel 和 gdb 调试 c++ 应用程序
【发布时间】:2022-01-07 01:59:56
【问题描述】:

我有点困惑。在使用 gdb 调试 bazel 构建的应用程序时,似乎有几种选择:

  1. dazel run --config=relwithdebinfo --run_under=gdb

  2. dazel run --compilation_mode=dbg --run_under=gdb

这让我进入 gdb 但只有第二个选项似乎启用了真正的调试模式,因为整个应用程序运行速度较慢并将调试信息写入终端,而第一个选项没有。

有人可以澄清什么时候使用什么选项吗?

另外,bazel 似乎阻止我独立执行应用程序,即在构建时使用 ./app

dazel 构建 ...

而不是使用

dazel 跑...

这是为什么呢?

【问题讨论】:

    标签: gdb bazel


    【解决方案1】:

    一些可以帮助您弄清楚发生了什么的事情:

    1. --config 是一种以方便的方式使用其他 Bazel 命令行标志组的方法。这些组在 bazelrc 文件中定义。所以在一些 bazelrc 文件中有一个 relwithdebinfo 的定义,它添加了一些其他标志。您可以使用--announce_rc 让 Bazel 打印它正在使用的每个配置和 bazelrc。
      见:
      https://docs.bazel.build/versions/main/user-manual.html#flag--config
      https://docs.bazel.build/versions/main/guide.html#bazelrc-the-bazel-configuration-file

    2. --compilation_mode--config 是分开的。 Bazel 中的编译器工具链可以定义不同的模式,以及与这些模式一起使用的标志。见https://docs.bazel.build/versions/main/user-manual.html#flag--compilation_mode

      使用默认C++工具链,当--compilation_modedbg时,添加-ghttps://github.com/bazelbuild/bazel/blob/b03bb844b10d5d0d29f5859293e91b5bd739c64f/tools/cpp/cc_toolchain_config.bzl#L659-L660

      当为opt时,添加其他标志:https://github.com/bazelbuild/bazel/blob/b03bb844b10d5d0d29f5859293e91b5bd739c64f/tools/cpp/cc_toolchain_config.bzl#L675-L686

      可以使用--cxxopt 手动添加这些标志,例如-g(甚至可以在bazelrc 中创建build:dbg --cxxopt=-g 之类的配置,然后在Bazel 的命令行上执行--config=dbg),但它的可移植性较差。 (例如,工具链还为 Windows 定义了 --compilation_mode=dbg 的编译器标志:https://github.com/bazelbuild/bazel/blob/master/tools/cpp/cc_toolchain_config.bzl#L850-L855

    3. 对于dazel builddazel run,问题可能是特定于应用程序的。例如,使用run,目标的data 属性中的文件可用,而build 则不可用(因为资源打包是应用程序/语言/域特定的)。因此,应用程序可能会对其运行方式或其依赖项的位置做出假设。或者它可能是 dazel 的特定内容,我不太熟悉它。有了更多关于问题所在的信息,就有可能进一步诊断。

    【讨论】:

      猜你喜欢
      • 2012-08-11
      • 2011-01-10
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多