欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > Linux 调试器 —— gdb 的使用

Linux 调试器 —— gdb 的使用

2025/10/18 16:39:58 来源:https://blog.csdn.net/2302_77289177/article/details/140938171  浏览:    关键词:Linux 调试器 —— gdb 的使用

Linux 调试器 —— gdb 的使用

  • 前置条件
    • debug 模式 和 release 模式
    • gdb 下载
  • 基础操作
    • 退出调试器
    • 查看源代码
    • 运行程序
    • 断点
      • 打断点
      • 查看断点
      • 取消断点
      • 关闭断点
      • 开启断点
    • 单步执行
      • 逐过程
      • 逐语句
    • 打印表达式值、变量值、地址等等
      • 单次查看
      • 常显示
    • 运行至下一个断点处
    • 运行完所在函数,就停下来
    • 跳转至指定行
    • 查看当前栈帧局部变量的值
    • 修改变量的值
    • 查看各级函数调用及参数

在写代码时,出现错误 Bug 解决不了总是要调试的,如果是图像化界面(类似 vs2019),那倒还好调试,但是对于服务器端的命令行界面,很难进行像样的调试,所以接下来介绍开发工具调试器:gdb

本篇由于图片较多,看起来繁杂,请利用目录索引翻找

前置条件

debug 模式 和 release 模式

首先要知道,一份代码可以被 两种模式 编译,分别是 debug 模式release 模式 ,而 debug 模式 才能被调试,这对程序员来说是必不可少的; release 模式 是发行版,是给用户使用的,并不含 调试信息 ,所以被 gcc 编译出来的同样一份代码,在 debug 模式 下编译出来的 二进制程序 文件大小要大于 release 模式 下的

gcc 默认是以 release 模式 下编译,需要加上 -g 选项才能变成 debug 模式 ,就像下面这样:

gcc gdbtest.c -o gdb_debug -g

那么 gdb_debug 就是 含有调试信息的二进制可执行程序 ,我们是 对此二进制可执行程序进行调试

gdb 下载

运行以下指令即可:

sudo yum install gdb.x86_64 -y

基础操作

有了类似上面的 gdb_debug 文件,就可以运行 gdb 指令了:

gdb gdb_debug

可以看到如下信息:

在这里插入图片描述

退出调试器

运行如下指令即可:

quit
q

查看源代码

使用 l 或者 list 均可:

list 源代码文件名:此文件内行号或者函数
l 源代码文件名:此文件内行号或者函数

例子:

list gdbtest.c:main
list gdbtest.c:1l gdbtest.c:main
l gdbtest.c:1

在这里插入图片描述

可是这样只能看见默认的 10 行,所以我们可以先运行 l gdbtest.c:1 指令,然后一直 Enter查看所有代码

在这里插入图片描述

运行程序

run

r

在这里插入图片描述

断点

打断点

b 源代码文件名:此文件内行号或者函数

例子:

b gdbtest.c:17
b gdbtest.c:AddToTarget

在这里插入图片描述

查看断点

info b
i b

在这里插入图片描述

Num 是指 断点编号
Enb 是指 断点的使能y 表示 yes , 表明断点为开启状态n 表示 no ,反之

取消断点

d 断点编号

例子:

d 1

在这里插入图片描述

关闭断点

关闭断点时,断点不会生效

disable 断点编号

在这里插入图片描述

开启断点

enable 断点编号

单步执行

逐过程

逐过程 是显然的 单步执行 ,但对于函数而言,会 把函数当成一条语句直接执行,而不进入 ,所以一个函数就是一个原子的过程

单步执行 后,会将打印结果也给我们显示出来

next
n

如图可知:我们没有进入 AddToTarget() 函数的内部

在这里插入图片描述

逐语句

这个就很好理解了,自己所写的每一条语句都 单步执行包括函数内部语句

逐语句单步执行 后,也会将打印结果也给我们显示出来,甚至会将传过来的参数值都为我们指明

step
s

如图可知:我们进入了 AddToTarget() 函数的内部

在这里插入图片描述

打印表达式值、变量值、地址等等

单次查看

使用 print 或者 p 均可

p 变量
p 表达式

在这里插入图片描述

常显示

会帮我们一直显示出来想要查看的值

display 变量

在这里插入图片描述

想要 关闭常显示 ,如下指令:

undisplay 变量编号

运行至下一个断点处

continue
c

在这里插入图片描述

运行完所在函数,就停下来

finish

在这里插入图片描述

跳转至指定行

until n

查看当前栈帧局部变量的值

info local

修改变量的值

set var 变量=

查看各级函数调用及参数

bt

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词