gdb调试

21 篇文章 0 订阅

1、gdb调试的命令

gcc test1.c -g -o test

 

2、安装gdb

apt-get install gdb

 

3、进入调试

gdb test

 

4、开始调试

 start

17    void main() :表示从17行开始执行main函数

5、显示代码

方式(一)

list

方式(二)

l是list的简写形式

l

 

6、下一步

n是next的简写

next

 

7、查看函数

list+函数名

list myfun

 

8、查看变量名

p是print的简写

print i

9、进入某个函数

s是step的简写

step

10、设置断点

31表示在gdb中的行号

 break 31

 

11、查看断点信息

info breakpoints

 

12、直接跳转到下一个断点

简写是c

continue

当前运行的是第17行,在31行有一个断点,执行continue命令后直接运行到31行

 

13、删除断点

delete breakpoints + 断点编号

delete breakpoints 3

14、修改变量的值

set var num=20

 

15、查看之前所调用的所有函数的堆栈

简写是bt

backtrace

 

16、切换栈帧

frame 1

 

16、自动展示变量的值

17、一次显示两个变量

18、查看数组信息

(1)查看buff中的20ge内存地址

x/20 buff

(2)查看数组中第1个元素的值

p buff[0]

 

 

 

注:

1、01.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int myfun(int a){
        int i = 0;
        int* buff = (int*)malloc(sizeof(int)*100);
        while(i<100){
                buff[i] = a;
                a+=i;
                i++;
        }
        free(buff);
        return a/2;
}

void main(){
        printf("begin...\n");
        int num = 0;
        if(num > 10){
             printf("%d>10\n",num);
        }else{
                 printf("%d<=10\n",num);
        }

        int i;
        for(i=0;i<5;i++){
                printf("i:%d\n",i);
                num+=i;
        }
        myfun(&num);

        printf("end...\n");
}

2、

gdb调试

编译加上-g参数
gcc test1.c -g -o test1

进入调试
gdb test1

开始调试
start

显示代码
list-简写l
list 函数名称(查看函数内容)
list 行数(查看某行代码)

执行下一步
next-简写n

查看变量
print 变量名-简写p

进入到某个函数
step-简写s

设置断点
break 行号(gdb中的行号)-简写b

全速运行
continue-遇到断点会停止-简写b

查看断点信息
info breakpoints

删除断点
delete breakpoints 断点编号

修改变量的值
set var 变量=值

程序调用堆栈
当前函数之前的所有已调用函数列表,每一个都分配一个“帧”,最近调用的函数在0号帧里
backtrace-简写bt

切换栈帧
frame 1(查看指定栈帧的变量)

自动显示
display 变量名
取消自动显示
undisplay 行号(自动显示的行号)

查看内存布局
x /20 地址
x /20 buff-查看buff数组的前20个元素

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值