首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用gdb & bazel (& emacs)进行C++调试

用gdb & bazel (& emacs)进行C++调试
EN

Stack Overflow用户
提问于 2017-08-22 08:35:19
回答 1查看 19.6K关注 0票数 14

我想调试一个用Bazel生成的可执行文件。gdb调试器与Bazel生成的链接一起丢失,无法向我展示C++源代码。怎么解决这个问题?

项目根目录为/home/./Cpp/

代码语言:javascript
复制
./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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 08:35:19

第一步是使用调试模式生成可执行文件:

代码语言:javascript
复制
bazel build ... --compilation_mode=dbg -s

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

从命令行调试gdb:

您可以使用这个命令启动gdb (从您的项目根目录):

代码语言:javascript
复制
gdbtui bazel-bin/bin/main

->一切正常,您应该看到您的C++源代码。

错误将是执行

代码语言:javascript
复制
cd bazel-bin/bin/
gdbtui main

在这种情况下,由于链接,gdb无法检索源代码。

来自Emacs的gdb调试:

照常做

代码语言:javascript
复制
M-x gdb 

在emacs提示符中,定义可执行文件的完整绝对路径:

代码语言:javascript
复制
gdb -i=mi /home/picaud/.../Cpp/bazel-bin/bin/main

现在,在gdb缓冲区中,您必须通过定义项目根目录(工作区文件所在的位置)的绝对路径,告诉gdb在哪里查找源代码:

代码语言:javascript
复制
set directories /home/picaud/.../Cpp

现在emacs命令应该正常工作,您可以像往常一样进行调试。

(嗯,这是一个简单的解决办法,只是一张也许能帮上忙的便条.)

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45812725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档