C++ 使用 GDB 和 Bazel (& emacs) 进行调试
C++ debugging with 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 命令应该可以正常工作,您可以像往常一样进行调试。
(嗯,这是一个简单的解决方案,只是一个注释,也许可以提供帮助......
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 如何在C++生成器中禁用"使用调试.dcus"
- 使用vscode调试时,GDB意外退出
- 即使使用调试编译标志,表达式也是"optimized out"
- 调试 CUDA MMU 故障
- 小字符串优化(调试与发布模式)
- 调试和自由执行中的信号处理
- 调试编译的服务器在数据库打开时崩溃
- Visual Studio 调试优化如何工作?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 如何在大型c++项目的可视化代码中设置调试
- Qt 调试显示行号
- C++ 使用 GDB 和 Bazel (& emacs) 进行调试