Linux调试------gdb的使用

目录

前言

一、gdb打开可执行程序

二、查看代码与操作断点

1.l 查看代码

2.b 打断点

3.info  b  查看断点信息

4.d   删除断点

5.disable 和 enable 断点的禁用与启用

三、调试 

1.r  启动调试 

2. n  逐过程

3. s  逐语句 

4.display显示变量

5.undisplay 取消显示

四、跳转命令与特殊命令

1.until 跳转到指定行

2. c  跳转到断点处

3.finish 运行到当前函数结尾

4.bt 查看调用堆栈

5. set var  修改变量值


前言

在vs2022,有可视化界面,我们调试起来非常简单,点一点就行了,在linux下,如果我们需要调试代码,就得用到工具gdb。

没有安装gdb的可以使用下面代码安装

sudo yum install -y gdb

一、gdb打开可执行程序

调试之前,我们需要先写出一份代码,我们拿下面的累加的代码举例调试

#include <stdio.h>

int AddToEnd(int end)
{
    int i = 1;
    int sum = 0;
    for(;i<end;i++)
    {
        sum+=i;
    }
    return sum;
}

int main()
{
    int end = 100;
    int result = 0;

    result = AddToEnd(end);
    printf("result:%d\n",result);
    return 0;                                                       
}

程序很简单,我们vim编辑好代码  gcc 编译一下,再使用gdb + 可执行程序进行调试。

发现没有debug模块,这是因为我们gcc编译默认模式为release模式,如果要使用debug模式需要添加 -g 

二、查看代码与操作断点

l(list) 查看代码
b(breakpoint) 打断点
info b 查看断点
d (delete) + 断点编号 删除断点
disable 禁用断点
enable 启动断点

1.l 查看代码

输入 l  可以查看部分代码,gbd会将他认为重要的部分代码给我们做展示。

输入  l + 1  从第一行开始查看代码,一直按回车可以往下查看 

2.b 打断点

打断点的三种方式   

b + 行号 

b + 函数名 

b + 指定文件:行号(多文件下比较方便)

3.info  b  查看断点信息

info b 查看断点信息

4.d   删除断点

d + 断点编号删除断点

5.disable 和 enable 断点的禁用与启用

info b查看断点信息中,Enb这一行为y代表断点是启动状态。

disable + 编号  可以让断点被禁用。 

 

输入 r 运行并不会在被禁用的断点中停止

 

enable + 编号  启动断点,这样  r  运行就会在断点处停止下来。

三、调试 

r(run) 启动调试
n(next) 逐过程调试
s(step) 逐语句调试
display 显示变量
undisplay + 编号 取消变量显示

1.r  启动调试 

r(run)启动调试,遇到断点处停下来,如果一直没遇到断点,就相当于运行程序。

2. n  逐过程

n (next)为逐过程调试代码,相当于vs2022的F10,遇到函数直接执行到下一行,不进入函数内部。

3. s  逐语句 

s(step)为逐语句调试代码,相当于vs2022的F11,遇到函数会进入函数继续调试,如下。

4.display显示变量

display + 变量 可以显示该变量的值,后续执行时都可以看到该变量。

5.undisplay 取消显示

undisplay + 变量编号 取消显示变量。

四、跳转命令与特殊命令

until 跳转到指定行
c 跳转到断点处
finish 运行到当前函数结尾
bt 查看调用堆栈
set var 修改变量值

1.until 跳转到指定行

until + 行号   跳转到指定行。

2. c  跳转到断点处

c(continue) 跳转到下一个断点处

3.finish 运行到当前函数结尾

finish 将当前函数运行完停止。

4.bt 查看调用堆栈

bt  查看调用堆栈,这里在函数AddToEnd内部,因此有两个堆栈。

5. set var  修改变量值

set var 变量 = 值   修改变量的值。如下,修改了变量的值,输出结果也不一样了。

相关推荐

  1. Linux调试器-gdb安装与使用

    2024-01-10 09:32:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 09:32:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 09:32:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 09:32:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 09:32:03       20 阅读

热门阅读

  1. 时间格式化插件(dayjs)

    2024-01-10 09:32:03       35 阅读
  2. The ultimate BMW scan tool on the market!

    2024-01-10 09:32:03       37 阅读
  3. 力扣-278. 第一个错误的版本

    2024-01-10 09:32:03       37 阅读
  4. xopen 一个高效压缩和解压缩python库碾压gzip

    2024-01-10 09:32:03       24 阅读
  5. apache2的虚拟主机的配置

    2024-01-10 09:32:03       32 阅读
  6. DevOps|产研运协作工具链上的皇冠-项目管理工具

    2024-01-10 09:32:03       34 阅读
  7. Leetcode 2697. 字典序最小回文串

    2024-01-10 09:32:03       34 阅读
  8. 【SOC的多种计算方法】

    2024-01-10 09:32:03       39 阅读
  9. performClick()方法

    2024-01-10 09:32:03       35 阅读
  10. The most simple way to use Postman

    2024-01-10 09:32:03       43 阅读
  11. php将文本内容写入一个文件(面向对象写法)

    2024-01-10 09:32:03       43 阅读