GDB用法简要整理

时间:2021-08-23 09:06:04

[时间:2017-05] [状态:Open]
[关键词:gdb,调试,debug,用户手册]

使用gdb是需要在编译是指定-g命令,在可执行文件中添加符号信息。

1. 启动和退出

可以使用gdb gdb executable-file等启动gdb调试。
退出时,命令行输入quitq或者ctrl + d。
在gdb命令界面中可以输入help获得帮助信息。

2. 查看调用堆栈

使用backtrace where bt可查看当前线程调用堆栈。

3. 调试中导航命令

  • run 开始调试程序,可使用命令行参数指定
  • start 执行调试程序到main函数的第一行,使用的是之前输入的命令行参数
  • pause continue 暂停和继续调试程序
  • step是step-into模式下的命令,顺序执行下一条指令,是函数的话会跳入该函数内部,并停在第一行。
  • next是step-over模式下的命令,顺序执行同级别堆栈的下一条指令,即对于函数,会自动跳过,当做一条指令处理。
  • finish是step-out模式下的命令,跳出当前堆栈,进入上一层。

4. 调试时查看变量或表达式

print variable-name使用该指令可以显示变量的值。

5. 查看调试信息

info stack查看调用堆栈
info thread 查看线程堆栈

6. 内存调试器(memory debugger)

之前只是知道有valgrind等辅助检测内存泄露的工具,但不太清楚还有这个名字。
最初的来由是因为c/c++都存在相同的内存管理问题(比如内存泄露、缓冲区溢出、内存管理错误等bug),这就催生了内存调试器的出现。

常用的内存调试器有Valgrind、Purify、insure++、boundschecker。
具体可以参考点评五款用于 Linux 编程的内存调试器

7. 小结

直接使用gdb命令行总是枯燥无味的。正确的用法是结合实际情况分析并学习相关调试技巧。

可以在linux下使用DDD的UI界面调试,跟vs的调试器有点类似。

本文简要整理了gdb支持的调试命令,作为后续参考。
更详细的资料建议参考gdb manual