一、常用命令
- break(b):
break func:在函数开始设置断点,进入函数时停止运行
break num:在第num行设置断点
b reak:没有参数表示在下一条指令停止
delete break:删除断点 - breaktrace(bt):查看各级函数调用及参数
- call func:强制调用函数
- continue(c):当程序遇到断点停止后,可继续运行直至下一个断点
continue count:忽略后面的count个断点 - display:
display var:实时打印变量数值 - examine(x):查看内存地址中的值
- finish:运行程序,直到当前函数完成
- frame(f):选择栈桢
- info(i):查看寄存器、断点、观察点和信号等信息
- jump:
jump num:程序跳到num运行
jump +ofst:偏移量格式地跳转 - list(l):
list num:列出第num行周围的源程序
list func:列出函数func周围的程序
list :可看当前行后面的程序
list-:可看当前行前面的程序 - next(n):单步执行,遇到函数时,不进入函数
next count:执行后面的count条指令 - print(p):
print var:打印出var变量的值
print *(addr)=val:修改值 - quit(q):退出调试
- return:如果在函数中设置了高度断点,在断点后还有语句未执行,可强制返回
return expr:带参数返回,作为函数的返回值 - run:启动程序
- set:修改寄存器、内存、变量的值
- signal:可以产生一个信号量给被调试的程序
- start:开始执行程序,在main函数变量定义之后的第一行语句前面等待命令
- step(s):单步执行,遇到函数则进入函数执行
step count:执行后面的count条指令后停止 - watch:用来观察某个表达式的值是否有变化,如果有变化则马上停止程序
二、一个例子
首先源程序如下:
test.c
#include <stdio.h>
int add_range(int low, int high)
{
int i = 0;
int sum = 0;
for(i=low; i<=high, i++)
{
sum = sum + i;
}
return sum;
}
int main()
{
int result[100];
char* c = "hello world";
printf("%s\n", c);
result[0] = add_range(1, 100);
return 0;
}
编辑完保存,并编译 gcc -g test.c -o test
-g选项是在可执行文件里加入源程序信息以供调试
接着开始进行调试 gdb test
GNU gdb (GDB)