文章目录
- GDB基本使用
- 1. bazel的debug过程
- 2. line-tables-only的使用
- Reference
GDB基本使用
参考文档: https://zhuanlan.zhihu.com/p/655719314
1. bazel的debug过程
- 需要带
--copt=-g --copt=-ggdb
选项进行编译
// bazel build --strip=never --copt=-g --copt=-ggdb //path/to/package/...
// break source.cc:78 : 表示在source.cc 78 line打断点
// p/print 一般只能打印C++中变量信息,而不能打印自定义的一些表达式,和python不太一样
// 一些命令说明:
// watch + 表达式: 通过设置好查看的表达式,则可以使程序在表达式成立时终止运行; 比如观察某个循环iteration时有用
// breaktrace/bt: 该命令打印当前停住地方函数调用栈的所有信息,如果crash,则用bt能很好确定那个地方错误。
/ bt n/-n: 表示打印栈顶或者栈底n层信息
// info f 则可以显示出更为详尽的当前栈层的信息
// info args 显示当前函数的参数名和值
// 用list打印当前程序执行的源码。 需要在编译时加 -g.
2. line-tables-only的使用
- This full debug info allows for a good debugging experience, with the ability to view function names, local variables, step through code, etc. However, it produces large executable/binary sizes. The line-tables-only optimization strips away all debug info except the line number tables. This means the executables retain the ability to step through code line by line in the debugger, but lose information like local variable names, function parameters, etc.
# cmake
set(CMAKE_CXX_FLAGS_DEBUG "$<$<CONFIG:DEBUG>:-gline-tables-only>")
# bazel 不知道怎么设置,只知道调用dbg这样写
config_setting(
name = "x86_debug_build",
values = {
"cpu": "x86",
"compilation_mode": "gdb",
},
)