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

在这里插入图片描述

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


前言

程序的发布方式有两种,debug模式和release模式。

Linux下,gcc/g++编译的程序默认是release模式(没有调试信息),这个我们是可以验证的

【Linux】Linux下的代码调试器 ---gdb_第1张图片

那么,如果在Linux要调试代码(debug模式),需要加上 -g 选项。

目录

  • 前言
  • 一、安装gdb指令
  • 二、打开调试与关闭调试
      • 2.1 进入调试模式
      • 2.2 退出调试模式
  • 三、常见的调试指令
      • 3.1 查看代码
      • 3.2 运行程序
      • 3.3 打断点
      • 3.4 查看断点
      • 3.5 逐过程
      • 3.6 逐语句
      • 3.7 监视窗口之查看变量
      • 3.7 监视窗口之修改变量
      • 3.8 快速跳转
        • 3.8.1 指定行
        • 3.8.2 跳过函数
        • 3.8.3 跳断点
      • 3.9 禁用断点
      • 3.10 解禁断点
      • 3.11 查看当前栈帧
      • 3.12 只当前数栈帧里的变量值

一、安装gdb指令

gdb --version

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

在这里插入图片描述

# 安装指令
sudo yum install -y gdb

二、打开调试与关闭调试

2.1 进入调试模式

注意:调试的对象是已经生成的可执行程序,不是最开始的源文件

为了方便接下来的演示,我把生成的可执行程序的命令写进makefile文件里

【Linux】Linux下的代码调试器 ---gdb_第2张图片

gdb [可执行文件]

【Linux】Linux下的代码调试器 ---gdb_第3张图片

2.2 退出调试模式

q 或 quit

【Linux】Linux下的代码调试器 ---gdb_第4张图片

三、常见的调试指令

3.1 查看代码

  • 可以通过l指令随时随地查看代码。

l命令一般是配合数字进行查看,不加数字默认查看代码最中间的十行内容

l 1	//从代码第一行开始查看其前后十行
l	// 默认查看代码最中间的十行内容

那如果想查看整个代码怎么办?很简单,只要第一次输入l 1,那么按回车后可接着往下展示,直到代码展示完毕

【Linux】Linux下的代码调试器 ---gdb_第5张图片

3.2 运行程序

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

3.3 打断点

b 行号
b 函数
b 源文件 [行号](多文件)
b 源文件:[函数] (多文件)

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

3.4 查看断点

info b	

【Linux】Linux下的代码调试器 ---gdb_第6张图片

断点详细信息简介:

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

3.5 逐过程

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

【Linux】Linux下的代码调试器 ---gdb_第7张图片

3.6 逐语句

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

【Linux】Linux下的代码调试器 ---gdb_第8张图片

3.7 监视窗口之查看变量

p [变量]
display [变量](常显示)
undisplay + 编号 (取消常显示)

【Linux】Linux下的代码调试器 ---gdb_第9张图片

3.7 监视窗口之修改变量

set var 变量=你要修改的值

【Linux】Linux下的代码调试器 ---gdb_第10张图片

3.8 快速跳转

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

【Linux】Linux下的代码调试器 ---gdb_第11张图片

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

【Linux】Linux下的代码调试器 ---gdb_第12张图片

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

3.9 禁用断点

disable  [断点编号]

【Linux】Linux下的代码调试器 ---gdb_第13张图片

3.10 解禁断点

enable [断点编号]

【Linux】Linux下的代码调试器 ---gdb_第14张图片

3.11 查看当前栈帧

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

【Linux】Linux下的代码调试器 ---gdb_第15张图片

3.12 只当前数栈帧里的变量值

  • 显示当前栈帧所有的变量值
info locals

【Linux】Linux下的代码调试器 ---gdb_第16张图片

你可能感兴趣的:(Linux,linux,运维,服务器,vim,学习,笔记)