Pic*_*ent 9 c++ emacs gdb bazel
我想调试用Bazel生成的可执行文件.使用Bazel生成的链接丢失了gdb调试器,并且无法向我显示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
Run Code Online (Sandbox Code Playgroud)
Pic*_*ent 15
所述第一步骤是使用调试模式,以产生可执行文件:
bazel build ... --compilation_mode=dbg -s
Run Code Online (Sandbox Code Playgroud)
(-s选项不是必需的,它只显示已执行的命令,如果需要,可以将其删除)
从命令行调试gdb:
您可以使用此命令启动gdb(从项目根目录):
gdbtui bazel-bin/bin/main
Run Code Online (Sandbox Code Playgroud)
- >一切都很好,你应该看到你的C++源代码.
该错误是做:
cd bazel-bin/bin/
gdbtui main
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由于链接,gdb无法检索源代码.
来自Emacs的gdb调试:
像往常一样
M-x gdb
Run Code Online (Sandbox Code Playgroud)
在emacs提示符中定义可执行文件的完整绝对路径:
gdb -i=mi /home/picaud/.../Cpp/bazel-bin/bin/main
Run Code Online (Sandbox Code Playgroud)
现在在gdb缓冲区中,您必须通过定义项目根目录的绝对路径(您的WORKSPACE文件所在的位置)来告诉gdb在哪里找到源:
set directories /home/picaud/.../Cpp
Run Code Online (Sandbox Code Playgroud)
现在emacs gdb命令应该可以正常工作,你可以照常调试.
(这是一个简单的修复,只是一个可能有帮助的说明...)