使用GDB调试程序

常用命令

命令 描述
start 开始执行程序,并停在main函数的第一条语句处
run(r) arg  使用arg参数运行程序
finish 继续运行到当前函数返回为止
quit(q) 退出gdb调试环境
list(l) 列出源代码,接着上次的位置,每次列10行
list 行号   列出从第几行开始的源代码  
list 函数名 列出某个函数的源代码    
print(p) var 打印变量的值
set var 修改变量的值
break(b) 行号或函数名 设置断点
step(s) 执行下一行语句,如果有函数则进入到函数中
next(n) 执行下一行语句
continue(c) 继续运行
回车 重复执行上一次的命令

 

 

 

启动GDB

在使用gdb调试的可执行文件在编译时需要加-g选项,否则将看不见程序的函数名、变量名。

1. gdb <program>  调试当前目录下的program程序

2. gdb <program> core  用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3. gdb <program> <PID> 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

 

一个例子

源代码

#include <stdio.h>

int add_range(int low,int high)
{
    int i,sum;
    for(i=low;i<=high;++i)
        sum+=i;
    return sum;
}  

int main(void)
{
    printf("1+2+3+...+10=%d\n",add_range(1,10));
    return 0;
}

使用gcc编译程序

gcc -g test.c -o test

运行程序,可以得到下面的结果

使用gdb调试程序

gdb test

使用start运行程序,程序将执行到printf语句

使用step(s)执行下一步,将进入add_range函数。接着执行print(p) sum打印sum的值,可见程序出错是因为sum没有被初始化。

使用set var修改sum的值,键入finish命令继续执行,可见该函数已经返回正确的值了。

 

posted @ 2015-11-08 12:53  Runnyu  阅读(703)  评论(0编辑  收藏  举报