我想调试一个用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发布于 2017-08-22 08:35:19
第一步是使用调试模式生成可执行文件:
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缓冲区中,您必须通过定义项目根目录(工作区文件所在的位置)的绝对路径,告诉gdb在哪里查找源代码:
set directories /home/picaud/.../Cpp现在emacs命令应该正常工作,您可以像往常一样进行调试。
(嗯,这是一个简单的解决办法,只是一张也许能帮上忙的便条.)
https://stackoverflow.com/questions/45812725
复制相似问题