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

文章目录

  • 一、gdb简介
  • 二、gdb的安装
  • 三、gdb使用
    • 3.1、release和debug版本
    • 3.2、gdb基本使用命令
      • 1、启动gdb
      • 2、调试命令
      • 3、显示代码(list)
      • 4、断点命令(breakpoint)
      • 5 、变量命令(variable)
      • 6、特殊调试命令
      • 7、调用堆栈命令
      • 8、显示当前函数内临时变量:info locals

一、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

【Linux系统】第七篇:Linux调试器gdb的使用_第1张图片
这里我们可以发现并没有关于debug的信息。其实在Linux中,gcc/g++编译器默认生成的版本是release版本的,如果想进入debug版本,我们就要带-g选项

gcc mytest.c -o mytest -g

【Linux系统】第七篇:Linux调试器gdb的使用_第2张图片
【Linux系统】第七篇:Linux调试器gdb的使用_第3张图片
总结:

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

3.2、gdb基本使用命令

1、启动gdb

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

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

【Linux系统】第七篇:Linux调试器gdb的使用_第4张图片

在这里插入图片描述

2、调试命令

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

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

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

vs2019中:
【Linux系统】第七篇:Linux调试器gdb的使用_第5张图片
运行演示:

  1. 直接调试
    【Linux系统】第七篇:Linux调试器gdb的使用_第6张图片

  2. 逐过程
    【Linux系统】第七篇:Linux调试器gdb的使用_第7张图片

  3. 逐语句
    【Linux系统】第七篇:Linux调试器gdb的使用_第8张图片

3、显示代码(list)

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

【Linux系统】第七篇:Linux调试器gdb的使用_第9张图片

4、断点命令(breakpoint)

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

【Linux系统】第七篇:Linux调试器gdb的使用_第10张图片

5 、变量命令(variable)

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

【Linux系统】第七篇:Linux调试器gdb的使用_第11张图片

6、特殊调试命令

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

【Linux系统】第七篇:Linux调试器gdb的使用_第12张图片

【Linux系统】第七篇:Linux调试器gdb的使用_第13张图片

7、调用堆栈命令

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

【Linux系统】第七篇:Linux调试器gdb的使用_第14张图片

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

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

【Linux系统】第七篇:Linux调试器gdb的使用_第15张图片

你可能感兴趣的:(Linux,linux)