我想调试用 Bazel 生成的可执行文件。 gdb 调试器丢失了 Bazel 生成的链接,并且无法显示 C++ 源代码。如何解决这个问题?
项目根目录为/home/.../Cpp/
./Cpp/
├── bazel-bin -> /home/picaud/.cache/bazel/_bazel_picaud...
├── bazel-Cpp -> /home/picaud/.cache/bazel/_bazel_picaud...
├── bazel-genfiles -> /home/picaud/.cache/bazel/_bazel_picaud...
├── bazel-out -> /home/picaud/.cache/bazel/_bazel_picaud...
├── bin
│ ├── BUILD
│ └── main.cpp
├── MyLib
│ ├── BUILD
│ ├── ....hpp
│ ├── ...cpp
└── WORKSPACE
第一步是使用调试模式生成可执行文件:
bazel build ... --compilation_mode=dbg --subcommands
(
--subcommands
选项不是强制性的,它只显示执行的命令,如果需要,您可以将其删除)
从命令行进行gdb调试:
您可以使用 this 命令启动 gdb(从项目根目录):
gdbtui bazel-bin/bin/main
-> 一切都好,你应该看到你的 C++ 源代码。
错误是要做:
cd bazel-bin/bin/
gdbtui main
在这种情况下,由于链接的原因,gdb 无法检索源代码。
从 Emacs 进行 gdb 调试:
照常做
M-x gdb
在 emacs 提示符中定义可执行文件的完整绝对路径:
gdb -i=mi /home/picaud/.../Cpp/bazel-bin/bin/main
现在在 gdb 缓冲区中,您必须通过定义项目根目录(您的 WORKSPACE 文件所在的位置)的绝对路径来告诉 gdb 在哪里找到源代码:
set directories /home/picaud/.../Cpp
现在 emacs gdb 命令应该可以正常工作,您可以像往常一样进行调试。
(嗯,这是一个简单的修复,只是一个可能有帮助的注释......)