C++ 使用 GDB 和 Bazel (& emacs) 进行调试



我想调试用 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 -s

(-s选项不是强制性的,它只显示执行的命令,如果需要,可以将其删除(

从命令行进行 GDB 调试:

您可以使用以下命令(从项目根目录(启动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 命令应该可以正常工作,您可以像往常一样进行调试。

(嗯,这是一个简单的解决方案,只是一个注释,也许可以提供帮助......

最新更新