使用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命令继续执行,可见该函数已经返回正确的值了。

 

转载于:https://www.cnblogs.com/runnyu/p/4947143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值