[时间:2017-05] [状态:Open]
[关键词:gdb,调试,debug,用户手册]
使用gdb是需要在编译是指定-g
命令,在可执行文件中添加符号信息。
1. 启动和退出
可以使用gdb
gdb executable-file
等启动gdb调试。
退出时,命令行输入quit
、q
或者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。