Gdb是一款GNU开发组织并发布的程序调试工具。
以下通过一个具体的例子来讲述Gdb将如何调试一个程序:
写一个test.c的程序:
#include<stdio.h>
void sum(int) ;
int main(){
int i,n=0;
sum(50) ;
for( i=1 ; i<=50 ; ++i){
n += i ;
}
printf("The sum of 1-50 is %d\n",n);
return 0;
}
void sum(int m){
int i,n=0;
for(i=1;i<=m;++i){
n += i ;
}
printf("The sum of 1 - m is %d\n",n);
}
编译并链接: gcc -Wall -o test test.c -g //这里的-g是将可执行文件(这是是指test)的调试信息添加到该可执行文件中去
(1) 启动Gdb
命令:$gdb test
(2) 查看源文件
命令: $list(缩写为:“ l ”) ;
(3)设置断点
命令:$b number 这里的number是需要设置断点的行号
(4)查看断点的信息
命令:$info b 这里查看的是所有断点的信息
(5)断点的删除
命令:$delete num 这里的num是在info中断点号,从1,2,....开始
(6)运行代码:
命令:$run [ num ] 这里的【】表示可选项, 代表从该行开始run ,缺省时表示从程序的第一行开始运行
(7)查看变量的值
命令:$p a 输出变量a的值
这里也可以用 $display(watch) b 在单步调试时自动设置一个查看变量(尤其是在for时的单步调试,可以输出每次该变量的结果)
(8)单步运行程序
命令1: $n , 表示next ,即下一步
命令2:$s , step, 也表示下一步
两者的不同点就在于: 对于函数,n不进入函数的内部,直接跳过函数内部的单步(相当于VC里的step over ); 而s则进入函数的内部,在函数内部还是单步(step in)
(9) 恢复程序运行:
命令:$c 一直运行,直到遇到下一个breakpoint 或是程序的结尾。