【Linux学习笔记】调试工具gdb

  • [1. gdb](#1. gdb)
  • [2. debug和release的认识](#2. debug和release的认识)
  • [3. gdb命令](#3. gdb命令)

1. gdb

gdb是Linux下的一个调试工具,主要内容是利用命令行来调试代码,下面我将以vs2019的调试操作逐一对应到gdb的调试命令。

首先我是在xshell连接远端云服务器搭配Linux环境来使用gdb的,第一步要做的就是下载gdb工具,具体怎么下载可以看yum工具部分内容。

下面写一个求和函数,来看看gdb是如何使用命令调试代码的。

cpp 复制代码
  1 #include <stdio.h>
    //求和函数
  2 int addToSum(int begin, int end)
  3 {
  4     int sum = 0;
  5     int i = begin;
  6     while(i <= end)
  7     {
  8         sum += i;
  9         i++;
 10     }
 11     return sum;
 12 }
	//打印函数
 13 void Display(int sum)
 14 {
 15     printf("%d\n",sum);
 16 }
	//主函数
 17 int main()
 18 {
 19     int sum = addToSum(0,10);
 20     Display(sum);
 21     return 0;
 22 }     

2. debug和release的认识

当我写好了一个代码,并且成功编译后,然后我好奇地想去调试一下代码。

为什么会这样子呢?原因是gcc工具编译好的代码是一个release版本的,这个版本是专门给用户使用的,是没有调试功能的。如果想要调试,那么就需要是debug版本的。

对应的来看到vs2019的编译。

从文件的体积上面,可以很清楚的区别debug和release版本的文件。

  • 怎么编译产生debug版本的文件呢?
  • 命令:gcc -o 文件名 -g 源文件
  • 操作:就是在原来编译的基础上,加上了-g选项,使其生成的文件是debug版本的。
  • 示范:

3. gdb命令

  1. 显示代码的命令

命令:list(简写可以写l)

操作:会将代码显示到屏幕上,可以指定从第几行开始展示

示范:

  1. 打断点

命令:break + 行号(可以直接 b + 行号)

操作:将你所指定的行号打上断点。

示范:

类似vs2019的F9打断点操作,类似下面的图。

  1. 查看断点信息

命令: info b

操作:将会在屏幕上显示你断点的信息

示范:

  1. 删除断点

命令: d + 断点编号

操作:删除对应编号的断点

示范:

  1. 调试运行

命令:run(可以简写r)

操作:直接调试运行到你的第一个断点

示范:

  1. 逐过程调试

命令:next(可以简写n)

操作:将从你现在所在的代码行开始,逐过程调试(如果有函数则不进入函数,跳到下一步),类似vs2019的F10

示范:

  1. 逐语句调试

命令:step(可以简写s)

操作:将从你现在所在的代码行开始,逐语句调试(如果有函数则进入函数,进入函数内部),类似vs2019的F11

示范:

  1. 运行到下一个断点

命令:continue(可以简写c)

操作:将直接跳转到下一个断点

  1. 完成当前函数跳出

命令: finish

操作:直接一步完成当前函数并退出函数

示范:

  1. 临时查看变量

命令:p + 想查看的变量

操作:将想查看的变量临时打印到屏幕上

示范:

  1. 持续查看变量

命令: display + 想查看的变量

操作:将在屏幕持续显示想要查看的变量,类似vs2019的监视窗口

示范:

  1. 取消持续查看变量

命令:undisplay + 变量前的编号

操作:将取消持续显示在屏幕的变量

示范:

  1. 跳转至指定行

命令: until + 行数

操作:将跳转到指定的行

示范:

相关推荐
dishugj2 小时前
【linux】Redhat 6.3系统安装zabbix-agent软件包,无法使用YUM源问题
linux·运维·zabbix
石像鬼₧魂石2 小时前
HexStrike-AI人工智能 渗透测试学习(Metasploitable2 192.168.1.4)完整流程总结
学习·ubuntu
非凡ghost2 小时前
MusicPlayer2(本地音乐播放器)
前端·windows·学习·软件需求
无奈笑天下2 小时前
【麒麟镜像vmtools异常排查指导书】
linux·运维·经验分享·云计算·kylin
大数据追光猿2 小时前
【大数据Doris】生产环境,Doris主键模型全表7000万数据更新写入为什么那么慢?
大数据·经验分享·笔记·性能优化·doris
sevenez2 小时前
Vibe Coding 实战笔记:从“修好了C坏了AB”到企业级数据库架构重构
c语言·笔记·数据库架构
智嵌电子2 小时前
【笔记篇】【硬件基础篇】模拟电子技术基础 (童诗白) 第10章 模拟电子电路读图
笔记·单片机·嵌入式硬件
Xの哲學3 小时前
Linux多级时间轮:高精度定时器的艺术与科学
linux·服务器·网络·算法·边缘计算
蓝桉~MLGT3 小时前
Ai-Agent学习历程—— 阶段1——环境的选择、Pydantic基座、Jupyter Notebook的使用
人工智能·学习·jupyter
2301_800050993 小时前
mysql
数据库·笔记·mysql