【Linux系统】第七篇:Linux调试器gdb的使用

一、gdb简介

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;

二、gdb的安装

sudo yum install -y gdb

三、gdb使用

3.1、release和debug版本

在进行程序开发的过程中,有两个版本,一个是release版本,一个是debug版本。我们都知道,如果要进行调试程序,这个程序必须的debug版本的我们才可以进行调试的。

在Linux中查看程序版本:

readelf -S test

在这里插入图片描述
这里我们可以发现并没有关于debug的信息。其实在Linux中,gcc/g++编译器默认生成的版本是release版本的,如果想进入debug版本,我们就要带-g选项

gcc mytest.c -o mytest -g

在这里插入图片描述
在这里插入图片描述
总结:

  • 程序的发布方式有两种,debug模式和release模式
  • Linux中gcc/g++编译器默认生成的可执行程序是release模式
  • 要使用gdb调试,必须加上 -g 选项

3.2、gdb基本使用命令

1、启动gdb

gdb + 可执行程序文件,如下:

gdb mytest_g 
gdb -q mytest_g //表示不打印gdb版本信息,界面较为干净;

在这里插入图片描述

在这里插入图片描述

2、调试命令

与vs中的调试命令进行对比:
gdb中:

名称 命令 解释
开始运行 run(r) 相当于开始调试F5,执行代码后会在断点处停下
逐语句 step(s) 相当于F11,有函数会进入函数内部
逐过程 next(n) 相当于F10,不会进入函数内部,执行整条语句;

像逐过程、逐语句这样的命令一次输入之后,可直接回车仍会再次执行。

vs2019中:
在这里插入图片描述
运行演示:

  1. 直接调试
    在这里插入图片描述

  2. 逐过程
    在这里插入图片描述

  3. 逐语句
    在这里插入图片描述

3、显示代码(list)

名称 命令 解释
可指定行号 list(l) + [N] 从第 N 行开始显示 10 行代码,可接着上次的位置继续打印
可指定函数名 list(l) + Name 从函数起始位置左右开始显示代码

在这里插入图片描述

4、断点命令(breakpoint)

名称 命令 解释
某行打断点 b + N 在某行打上断点
函数打断点 b + FuncName 在函数内起始位置打断点
查看断点 info + b 显示断点信息列表
删除断点 d + N 删除序号为 N 的断点,省略序号就是删除所有断点
启用断点 enable + N 启用序号为 N 的断点,省略序号就是启用所有断点
禁用断点 disable + N 禁用序号为 N 的断点,省略序号就是禁用所有断点

在这里插入图片描述

5 、变量命令(variable)

名称 命令 解释
监视变量 display + ValName 以列表的形式常显示在屏幕下方,类似于vs中的监视
取消监视 undisplay + N 去掉监视列表中的序号为 N 的变量的常显示
查看变量 p + Name 打印变量的值,不会常显示
修改变量 set + Name 设置指定变量的值

在这里插入图片描述

6、特殊调试命令

名称 命令 解释
结束当前函数 finish finish 会直接结束当前函数的调用,并停止在函数返回位置
继续运行 continue(c) continue 继续运行至下一个断点,相当于F5
运行至指定行 until + N 运行至当前函数内部的第 N 行

在这里插入图片描述

在这里插入图片描述

7、调用堆栈命令

名称 命令 解释
调用堆栈 breaktrace/bt 查看程序各级栈帧的调用情况

在这里插入图片描述

8、显示当前函数内临时变量:info locals

名称 命令 解释
显示当前函数内临时变量 info locals 显示当前函数内临时变量

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_58124165/article/details/127625929