Linux下C/C++调试工具GDB

实例调试程序 main.c :

#include <stdio.h>

int add_range(int low, int high)

{

int i, sum;

for (i = low; i <= high; i++)

sum = sum + i;

return sum;

}

int main(void)

{

int result[100];

result[0] = add_range(1, 10);

result[1] = add_range(1, 100);

printf("result[0]=%d\nresult[1]=%d\n", result[0], result[1]);

return 0;

}

以上函数add_range功能为从low加到high,基本调试步骤:

1.编译

$ gcc -g main.c -o main

2.调试

$ gdb main

3.帮助

(gdb) help

4.从第几行列出代码

(gdb) list 10

(gdb) l 10

5.直接回车重复上一条命令

6.开始调试,gdb会停在main()函数变量定义后第一条语句

(gdb) start

7.执行下一条(不进入函数),执行到printf语句时会直接输出到终端

(gdb) next

(gdb) n

8.步进,进入函数

(gdb) step

(gdb) s

9.查看栈帧

(gdb) backtrace

(gdb) bt

10.选择栈帧

(gdb)frame 帧编号

(gdb)f 帧编号

11..显示当前栈帧局部变量

(gdb)info locals

(gdb)i locals

12.打印变量

(gdb)print 变量

13.给变量赋值

(gdb)set var 变量=值

14.运行结束

(gdb) finish

15.退出

(gdb) quit

断点调试:

1.每次运行都显示变量

(gdb) display 参数

2.取消display

(gdb) undisplay 参数

3.设置断电

(gdb)break 行数

(gdb)b 行数

(gdb)b 文件名:行数 #在多文件情况下

4.运行至断点

(gdb)continue

(gdb)c

5.显示所有断点

(gdb) info breakpoints

(gdb) i breakpoints

6.删除某个断点

(gdb) delete breakpoints 断点号

7.条件断点

(gdb) break 断点行数 if 变量 != 0

8.重新开始运行到断点

(gdb) run

(gdb) r

9.禁用断点

(gdb)disable breakpoints 断点号

10.启用断点

(gdb)enable 断点号

未完待续。。。