一般来说GDB主要调试的是c/c++程序,首先在编译时,我们必须把调试信息添加到可执行文件中。使用编译器(cc/gcc/g++)的-g参数可以做到这一点。如:
1  | cc -g tst.c -o tst  | 
如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你使用-g成功编译目标代码以后,我们就可以使用gdb来调试程序。
启动GDB
1  | program 也就是你的执行文件,一般在当前目录下  | 
指令
列出原码
1  | list [行号]  | 
直接会车表示重复上一次命令
设置断点在行号处
1  | break [行号]  | 
在函数入口处加断点
1  | break [函数名]  | 
查看断点信息
1  | info break  | 
断点跟踪
| 命令 | 功能 | 
|---|---|
| r | 运行程序,run命令简写 | 
| n | 单条语句执行,next命令简写 | 
| c | 继续运行程序,continue命令简写。 | 
| p i | 打印变量i的值,p是print命令简写。 | 
| bt | 查看函数堆栈 | 
| finish | 退出函数 | 
| q | 退出gdb | 
调用系统命令
shell <command string> 调用UNIX的shell来执行 <command string>,环境变量SHELL中定义的UNIX的shell将会被用来执行<command string>,如果SHELL没有定义,那就使用UNIX的标准shell:/bin/sh。(在Windows中使用Command.com或cmd.exe)
重新构建
还有一个gdb命令是make ,可以在gdb中执行make命令来重新build自己的程序
1  | make <make-args>  | 
这个命令等价于
1  | shell make <make-args>  | 
参考资料
http://www.gnu.org/software/gdb/documentation/