【Linux】Linux下的代码调试器 ---gdb

在这里插入图片描述

👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++Linux还有算法
✈️专栏:Linux
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵,希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍


前言

程序的发布方式可以分为两种模式:debug模式和release模式

  • Linux下,gcc/g++编译的程序默认是release模式,而release模式下是没有调试信息。
  • 如果在Linux要调试代码(debug模式),编译时加上 -g 选项。而程序一旦被调试,注定会有各种的调试信息,因此debug下的可执行文件的大小一定会比release的大小要大。如何验证编译的程序是debug还是release
# 查看二进制
readelf -S 可执行文件 | grep -i 'debug'

在这里插入图片描述

一、安装gdb指令

gdb --version

大家首先在自己的云服务器指向以上命令,如果出现以下情况,那么你就要安装gdb指令

在这里插入图片描述

# 安装指令
sudo yum install -y gdb

二、打开调试与关闭调试

2.1 进入调试模式

注意:调试的对象是已经生成的可执行文件

gdb [可执行文件]

在这里插入图片描述

2.2 退出调试模式

q 或 quit

在这里插入图片描述

三、常见的调试指令

3.1 查看代码

l 数字	
l 函数

那如果想查看整个代码怎么办?很简单,只要第一次输入l 1,那么按回车后可接着往下展示(因为gdb会记录你最近一次执行的命令)

在这里插入图片描述

3.2 运行程序

这条指令一般配合断点使用。假设没有断点,那么程序会直接运行出结果;如果有断点,它会执行第一个断点

r

3.3 打断点

b 行号
b 函数
b 源文件:行号
b 源文件:函数

注意:退出调试后,第二次打开gdb,之前打的所有断点都会被自动清理;只要本次gdb不退出,断点依旧存在。

3.4 查看断点

info b	

在这里插入图片描述

断点详细信息简介:

  • Num:代表断点编号。
  • Enb:表示断点的使用状态。y表示启用,n表示禁用。
  • Address:表示断点的地址。
  • What:代表断点在哪个函数以及行号。

3.5 取消断点

d 断点编号

3.6 跳到下一个断点

这个指令就是针对断点的,前面说过r只能执行第一个断点,但无法实现两个断点间的跳转(注:依然需要先通过r指令把程序跑起来)

c

3.7 禁用断点

不删断点,只是把断点设置为禁用状态。

disable  [断点编号]

在这里插入图片描述

3.8 解禁断点

enable [断点编号]

在这里插入图片描述

3.9 逐过程

  • 对应着VS中的F10,即不会进入函数
n

在这里插入图片描述

3.10 逐语句

  • 对应着VS中的F11,即会进入函数
s

在这里插入图片描述

3.11 监视窗口之查看变量

p [变量] # 临时显示变量信息
display [变量] # 常显示
undisplay + 编号 # 取消常显示

在这里插入图片描述

3.12 监视窗口之修改变量

set var 变量=你要修改的值

在这里插入图片描述

3.13 快速跳转

3.13.1 指定行

程序运行后,我们可以直接通过until + 指定行的方式跳转至指定行,这个指令通常用来跳过循环。

until + [指定行]

在这里插入图片描述

3.13.2 跳过整个函数

这个指令主要是针对函数的,直接finish就可以在不打断点的情况下,跑完当前函数

finish

在这里插入图片描述

3.14 查看当前栈帧

按照我的理解的话,这个指令就是查看调试到哪个函数的栈帧,并且还可以知道是哪个函数调用了哪个函数。

bt

在这里插入图片描述

3.15 显示当前栈帧里的所有变量

info locals

在这里插入图片描述

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值