gdb使用前提
在编译时加上-g选项生成debug模式的代码
gdb提供的一些功能
r Run的简写,运行被调试的程序。
如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。
(gdb) r
c Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 (gdb) c
b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
b <行号> b <函数名称> b <函数名称> b <代码地址>
(gdb) b 8 (gdb) b main (gdb) b main (gdb) b 0x804835c
d [编号] d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 (gdb) d 删除所有断点
s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 (gdb) s (gdb) n
p <变量名称> Print的简写,显示指定变量(临时变量或全局变量)的值。
(gdb) p i
(gdb) p nGlobalVar
(gdb) p /x argc
$2 = 0x1
(gdb) p /o argc
$3 = 01
(gdb) p /b argc
Size letters are meaningless in "print" command.
(gdb) p /d argc
$4 = 1
l <行号> List的缩写,查看当前调试程序的代码文件
(gdb) l
(gdb) l line_number //显示指定行前后5行的代码
q Quit的缩写 退出gdb程序
gdb其他的功能
如果在启动调试的时候 需要给程序设定启动参数
(gdb)set args xxx xxxxx
(gdb)r
如果在gdb已经启动之后 需要去调试一个可执行程序。
(gdb)file ./a.out 加载当前路径下的a.out文件调试
(gdb)info break 显示所有的断点信息
当然gdb提供的功能远远不止这些,这里提到的都是最最常用的命令。