使用
gcc -Wall -pedantic -ansi 这些选项将启用许多警告和其他检查来检验程序是否符合C语言标准。
gdb所有版本都支持“空命令“,即直接按下回车键再次执行最近执行过的那条命令。再用step或next命令单步执行程序时,这个“空命令“非常有用。
run:运行一个程序,在run命令中的给出的所有参数都将作为程序的参数传递给程序。
backtrace:可以查看程序是如何到达这一位置的。
print:给出变量和其他表达式的内容。可以用print命令的表达式来查看处理过的数组元素,gdb允许我们使用几乎所有合法的C语言表达式来打印变量、数组元素和指针的取值。gdb将命令的结果保存在伪变量$<number>中。最后一次操作的结果总是为$,倒数第二次操作的结果为$$。这使得我们可以把某次操作的结果用在另一个命令中。例如:
(gdb) print j
$3 = 4
(gdb) print a[$-1].key
$4 = 1
要打印出一组连续的数据项,可以使用@<number>让gdb打印除指定书目的数组元素。例如:
(gdb) print array[0]@5
list:这个命令会打印出围绕当前位置前后的一段代码,如果继续使用list命令,会显示更多的代码。我们也可以给list命令提供一个行号活函数名作为参数,它将显示指定位置前后的代码。
break:设置断点。此外。我们可以修改断点设置,使程序不是在断点处停下来,而只是显示要查看的数据,然后继续执行。我们用commands命令来完成这一工作。它的作用是指定程序到达断点位置时需要执行的调试器命令。
(gdb) commands 2
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
> dispaly
> cont
> end
通过将断点的设置与相应的操作结合起来,就可以尝试修改程序(也被称为打补丁)而不需要修改程序的源代码并重新编译。可以用info命令查看曾经设置过的断点及display命令的内容,如下所示:
(gdb) info display
Auto-display expressions now in effect:
Num Enb Expression
1: y array[0] @ 5
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048427 in sort at debug1.c:21
breakpoint already hit 3 times
cont
设置命令如下:
(gdb) commands 2
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
> set variable n = n + 1
> cont
> end