【Linux】调试工具 - gdb

目录

一、gdb概述:

二、list(查看源文件代码):

三、run(运行程序):

​四、断点相关操作:

1、查看断点:

2、在指定行设置断点:  

3、在函数入口处设置断点: 

4、删除断点

5、禁用断点 / 启用断点

五、逐过程调试 / 逐语句调试:

1、逐过程调试:

2、逐语句调试:

六、常显示 / 去除常显示 :

1、常显示:

2、去除常显示:

3、打印变量名:

七、跳转至指定行与退出gdb:

1、跳转至指定行:  

2、退出gdb:


一、gdb概述:

  • 程序在发布时会有两种版本:Debug版本和Release版本。
  • Debug版本和Release版本其实就是优化级别的区别
  • Debug称为调试版本,编译的结果通常包含有调试信息,没有做任何优化,方便开发人员进行调试。
  • Release称为发布版本,不会携带调试信息,同时编译器对代码进行了很多优化,使代码更小,速度更快,发布给用户使用,给用户使用以更好的体验。
  • 在我们申请内存时,Debug模式会多申请一部分空间,分布在内存块的前后,用于存放调试信息。
  • 在Release模式下,编译器会对代码进行很多的优化操作,所以Release模式比Debug模式花的时间也会更多

而在Linux下 gcc/g++ 下生成的二进制程序默认是Release版本。要想进行调试操作就得要在源代码生成二进制程序时加上 -g 选项,将其改为Debug模式。

在接下来使用gdb调试时以以下代码为样例进行演示:

#include <stdio.h>int Sum(int n)
{int i = 1, sum = 0;for (; i <= n; i++){sum += i;}return sum;
}int main()
{printf("%d\n", Sum(100));return 0;
}

二、list(查看源文件代码):

list 指令可以在命令行显示源文件对应的代码,一次显示十行,可以简写成l有两种用法:

1:l 行号  (从对应行号开始在命令行输出源文件代码,一次显示十行)

2:l 函数名   (在命令行中输出对应函数的源代码)

 

三、run(运行程序):

run指令可以直接运行程序,如果程序没有断点则将程序运行到结束

四、断点相关操作:

1、查看断点:

info break(可简写为:i b)查看断点:

 

2、在指定行设置断点:  

break 行号(可简写为:b 行号) 

例如:分别在14、15、16行处打一个断点 

3、在函数入口处设置断点: 

break 函数名(可简写为:b 函数名)

 例如:在函数Sum处打一个断点

4、删除断点

删除指定断点:delete Num(可简写为d Num)Num为断点的序号

删除全部断点:delete break(可简写为d break)

5、禁用断点 / 启用断点

禁用指定断点:disable Num      Num为断点的序号

 

启用指定断点:enable Num       Num为断点的序号

五、逐过程调试 / 逐语句调试:

1、逐过程调试:

step(可以简写为s) 

2、逐语句调试:

next(可以简写为n)

六、常显示 / 去除常显示 :

1、常显示:

display 变量名 / 地址       每次执行语句时都会在命令行中打印常显示变量的值

2、去除常显示:

undisplay 对应的编号

3、打印变量名:

p 变量名        在命令行中打印对应变量的值

七、跳转至指定行与退出gdb:

1、跳转至指定行:  

until 指定行

2、退出gdb:

quit(可简写为q)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[计算机效率] 便笺的使用

2.4 便笺 便笺程序是一种方便用户记录、查看和编辑便签的简单应用程序。在Windows系统中&#xff0c;便笺通常作为系统自带的实用工具之一&#xff0c;可以帮助用户快速创建、编辑和组织便签&#xff0c;以便随时记录重要的信息、任务或提醒事项。 便笺程序通常具有以下特点&a…

阿里云企业2核4G5M服务器ECS u1性能测评

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

Metasploit(MSF)使用教程(以ms17_010永恒之蓝为例)

一.Metasploit简介&#xff1a; Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework&#xff0c;简称MSF。是一个免费、可下载的框架&#xff0c;通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工…

如何运用惟客数据CDP客户数据平台构建好用户画像?

​惟客数据CDP是一个企业级客户数据资产平台&#xff0c;能够跨平台整合全域客户数据&#xff0c;统一客户身份&#xff0c;实时全景客户画像&#xff0c;基于大数据计算和挖分析提供深度客户洞察&#xff0c;实现精细化运营和精准营销。部署更轻更快&#xff0c;快速实现企业数…

API接口数据集接口pytorch api接口获取数据

API是应用程序的开发接口&#xff0c;在开发程序的时候&#xff0c;我们有些功能可能不需要从到到位去研发&#xff0c;我们可以拿现有的开发出来的功能模块来使用&#xff0c;而这个功能模块&#xff0c;就叫做库(libary)。比如说&#xff1a;要实现数据传输的安全&#xff0c…

10分钟读懂Diffusion:图解Diffusion扩散模型

数据派THU 本文通过图解的方式让大家快速了解 Diffusion 原理。 [ 导读 ]想必大家都听说过——图像领域大火的深度生成模型Diffusion Model&#xff0c;为了让大家快速了解 Diffusion 原理&#xff0c;这篇文章我们通过图解的方式。希望对你有所帮助&#xff0c;让你在学习和应…

3D Gaussian Splatting for Real-Time Radiance Field Rendering(慢慢啃,还是挺复杂的)

三个关键要素 从相机配准的过程中得到的稀疏点云开始&#xff0c;使用3D Gaussian表示场景; 3D Gaussian: 是连续体积辐射场能够防止不必要的空空间优化。对 3D Gaussion进行交叉优化和密度控制: 优化各向异性血方差对场景精确表示。使用快速可视感知渲染算法来进行快速的训练…

CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2

漏洞简介 TeamCity Web 服务器中发现了第二个身份验证绕过漏洞。这种身份验证旁路允许在没有身份验证的情况下访问有限数量的经过身份验证的端点。未经身份验证的攻击者可以利用此漏洞修改服务器上有限数量的系统设置&#xff0c;并泄露服务器上有限数量的敏感信息。 项目官网…

当HR问你:“什么事会让你有成就感”你该怎么回答?【文章底部添加进大学生就业交流群】

当HR问你“什么事会让你有成就感”时&#xff0c;你可以通过以下方式回答&#xff1a; 强调目标实现&#xff1a; 表达你在达成挑战性目标时感到的满足感。举例说明你在过去的工作或项目中如何设定并成功实现了目标。 强调对团队成功的贡献&#xff1a; 谈论你与团队合作取得成…

Caffeine--实现进程缓存

本地进程缓存特点 缓存在日常开发中起着至关重要的作用, 由于存储在内存中, 数据的读取速度非常快,能大量减少对数据库的访问,减少数据库的压力. 缓存分为两类: 分布式缓存, 例如Redis: 优点: 存储容量大, 可靠性更好, 可以在集群间共享缺点: 访问缓存存在网络开销场景: 缓存数…

c++: 引用能否替代指针? 详解引用与指针的区别.

文章目录 前言1. 引用和指针的最大区别:引用不能改变指向2. 引用和指针在底层上面是一样的3. 引用和指针在sizeof面前大小不同4. 有多级指针,没有多级引用5.引用是引用的实体,指针会向后偏移同一个类型的大小 总结 前言 新来的小伙伴如果不知道引用是什么?可以看我的上一篇文…

el-table-column嵌套el-form-item不能进行校验问题解决

项目为vue3elementPlus开发的项目 业务要求&#xff1a;table表格展示数据&#xff0c;其中有一行是ip地址可展示可修改&#xff0c;此处要求增加自定义校验规则 先看一下效果&#xff1a; 此处先描述一下&#xff0c;问题出在了哪里&#xff0c;我将el-table的data,使用一个…

日常004:对文件、目录拥有rwx权限后可以做什么?

日常004&#xff1a;对文件、目录拥有rwx权限后可以做什么&#xff1f; ‍ 1.rwx权限针对文件的内容&#xff0c;而非文件本身。 2.文件夹是特殊的文件&#xff0c;它的内容就是ls -a​的所有文件和文件夹 r 读取目录w 添加、删除、重命名文件x 进入目录 ‍ 删除文件使用的是所…

connection SQLException, url:jdbc ,errorCode 0, state 08S01

connection SQLException, url: jdbc:mysql://localhost:3306/itcast_health?useUnicodetrue&characterEncodingutf-8, errorCode 0, state 08S01 添加&#xff1a;&useSSLfalse 添加前 添加后&#xff1a; 查询数据库正常

7.5寸WIFI电子桌牌 PW75R_DM

产品型号 PW75R_DM 尺寸(mm) 190*152*45mm 显示技术 电子墨水屏双面显示 显示区域(mm) 163.2(H) * 97.92(V) 分辨率(像素) 800*480 外观颜色 银灰色 显示颜色 黑/白/红 视觉角度 180 工作温度 0 - 40℃ 电池容量 2000mAh 供电方式 锂电池供电&#xff08;…

张驰咨询 - 推动新质生产力,新材料行业定制管理咨询解决方案

在这个快速变革的时代&#xff0c;张驰咨询携手各行业领军企业&#xff0c;共同打造新质生产力的未来。我们深入理解每个行业的发展现状及特点&#xff0c;洞察企业面临的痛点&#xff0c;用精准咨询方案&#xff0c;为新能源汽车、光伏产业、机器人、高端装备以及新材料和电子…

链表中的经典问题——回文链表

回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 题解一&#xff1a; 要判断一个单链表是否为回文链表&#xff0c;可以使用双指针和逆序链表的方法。具体步骤如下&…

AIGC笔记--Maya提取和修改FBX动作文件

目录 1--Maya数据解析 2--FBX SDK导出6D数据 3--6D数据映射和Maya可视化 完整项目代码&#xff1a;Data-Processing/FBX_SDK_Maya 1--Maya数据解析 在软件Maya中直接拖入FBX文件&#xff0c;可以播放和查看人体各个骨骼关节点的数据&#xff1a; 对于上图来说&#xff0c;…

基于yolov5的草莓成熟度检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的草莓成熟度检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的草莓成熟度系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目…

【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…