操作系统:fedora9
工具链:gcc-4.4.3
调试工具:GDB
新建一个源文件:gdb_test.c
</pre><pre name="code" class="cpp">#include <stdio.h>
void fun1()
{
printf("I'm fun1!\n");
}
int main()
{
int a = 3, b = 4, c;
printf("this is a test!\n");
fun1();
c = a + b;
printf("c=%d\n",c);
return 0;
}
新建makefile:
all: gdb_test clean
objects = gdb_test.o
gdb_test:$(objects)
gcc $(objects) -o gdb_test
gdb_test.o:gdb_test.c
gcc -g -c gdb_test.c
clean:
rm -f gdb_test.o
GDB启动调试:
#gdb gdb_test
设置断点:
b fun1
运行程序:
run
单步执行:
step
退出调试:
quit
在代码的指定位置中断,设置断点的命令是break,通常有如下方式:
break <function> 在进入指定函数时停住
break <linenum> 在指定行号停住。
break +/-offset 在当前行号的前面或后面的offset行停住。offiset为自然数。
break filename:linenum 在源文件filename的linenum行处停住。
break ... if <condition> ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。
可以通过info breakpoints [n]命令查看当前断点信息。此外,还有如下几个配套的常用命令:
delete 删除所有断点
delete breakpoint [n] 删除某个断点
disable breakpoint [n] 禁用某个断点
enable breakpoint [n] 使能某个断点
调试步进相关的命令主要有如下几条:
continue 继续运行程序直到下一个断点
next 逐过程步进,不会进入子函数
setp 逐语句步进,会进入子函数
until 运行至当前语句块结束
finish 运行至函数结束并跳出,并打印函数的返回值