系统 Ubuntu
调试示例:
#include <stdio.h> int func(int n)
{
int sum=,i;
for(i=;i<n;i++)
{
sum+=i;
}
return sum;
} main()
{
int i;
long result = ;
for(i=;i<;i++)
{
result += i;
} printf("result[1-100] = %d \n",result);
printf("result[1-250] = %d \n",func());
}
编译生成执行文件:
gcc -g tst.c -o tst
-g :生成调试信息,将调试信息加载到可执行文件中
-o tst : 确定输出文件的名称为 tst ,默认为 a.out , 不可与源文件重名
打断点:
b n // b 代表break , n 代表行号。在某一行打断点
b function // function 函数,在某个函数处打断点
info b // 打印断点信息
运行程序:
r // run
以上程序停在了断电处
打印变量值:
p i // 打印变量 i 的值
查看函数堆栈:
bt //
清除程序断点:
d // 清除程序断点 delete
单步跟踪:
s // 运行一行程序,且能够进入函数
n // 运行一行程序,且不能进入函数
显示源程序:
list n // 显示第n行周围的源程序
list function // 显示函数名为 function 的函数的源程序
list // 显示当前行后面的源程序
list - // 显示当前行前面的源程序
查看源代码内存:
info line // 查看源代码在内存中的地址;后面跟 行号 、 函数名 、 文件名:行号 、 文件名:函数名
disassemble (disass) // 查看源程序当前执行时的机器码
查看内存:
exmaine (x) // 查看内存中地址的值
x/<n/f/u> <addr>
n、f、u 是可选的参数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令
地址,那么格式可以是i。
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是4
个bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双
字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,
GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一
个值取出来。
<addr>表示一个内存地址。
查看寄存器:
info r (registers) // 查看寄存器的情况(除了浮点寄存器)