Linux开发工具【gdb】

news2024/11/24 14:09:27

Linux开发工具【gdb】

程序的发布方式有两种,debug模式(调试版本)和release模式(发布版本)。Linuxgcc/g++出来的二进制程序,默认是release模式。无法保证我们的代码有时候会出现问题,这时就要使用Linux的调试器gdb进行调试,下面我们就来讲讲gdb的使用

文章目录:

  • Linux开发工具【gdb】
  • 1. 可调试文件
  • 2. gdb调试操作
    • 2.1 进入与退出调试
    • 2.2 查看代码
    • 2.3 运行和断点
    • 2.4 单行和单步调试
    • 2.5 常用调试指令

1. 可调试文件

上面说过gcc/g++默认会生成release版本的可执行程序,我们可以使用指令来查看可执行程序中是否有调试信息

readelf -S 可执行程序 | grep -i debug	//查看可执行程序中的调试信息

这里我们会发现什么信息都没查到

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

完成这一操作直接在Makefile文件中做出修改即可

再次生成可执行程序就可以看到调试信息了

2. gdb调试操作

没有gdb的话可以自行下载

sudo yum install -y gdb  //安装gdb

2.1 进入与退出调试

生成可调试文件后,使用指令gdb 可调试文件名即可进入调试

gdb 可调试文件名  //进入调试

出现(gdb)标志了就表示进入gdb

使用q指令就可以直接退出gdb调试

q  //退出gdb调试

2.2 查看代码

通过l/list指令查看代码,查看代码的时候不会影响到其他调试指令

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

还可以使用指令list/l 函数名来列出该函数的源代码

==注意:==所有查看内容的指令并不会影响调试的指令

2.3 运行和断点

指令r/run可以运行程序,没有断点的话程序会直接运行出结果

r/run  //运行程序

使用指令b/break 行号/函数名可以在程序中设置断点

b/break 行号	//在指定行号设置断点
b/break 函数名  //在指定函数设置断点

使用指令info b/break可以查看所有断点信息

info b/break  //查看所有断点信息

Num这一列就是表示断点的编号,它会一直累加,直到调试结束

使用指令d 断点编号可以取消断点

d 断点编号  //取消指定断点

有了运行和断点下面我们就可以进行调试了

2.4 单行和单步调试

使用指令n/next进行单行调试,单行调试就是逐过程调试,向下调试的时候不会进入函数内部

n/next  //单行调试

使用指令s/step进行单步调试,单行调试就是逐语句调试,向下调试的时候会进入函数内部

s/step  //单步调试

2.5 常用调试指令

gdb的使用门槛较高,需要多加练习,下面附上一些gdb常用调试指令,没列举到的大家可以自行查阅资料,希望能给大家带来帮助

list/l 行号             //显示源代码,接着上次的位置每次十行往下列

list/l 函数名           //列出某个函数的源代码

r/run 			        //运行程序

s/step 					//逐语句(进入函数)

n/next 					//逐过程(不进入函数)

break/b 行号 			  //在改行设置断点

info break			   //查看断点信息

d/delete n 			   //删除序号为n的断点

d/delete               //删除所有断点

disable breakpoint n   //禁用序号为n的断点

enable breakpoint n    //启用序号为n的断点

breaktrace/bt          //查看各级函数调用及参数

p 变量名                //打印变量值

set var 表达式(比如:i = 100)  //修改变量的值

display 变量名          //跟踪查看一个变量,每次停下来都显示它的值(长显示)

undisplay 序号          //取消序号对应的变量的跟踪

until 行号              //跳转到对应的行号所在行,执行完区间代码

finish 				   //进入一个函数执行完该函数就停下来

continue/c 			   //从一个断点处直接运行至下一个断点处

q/quit 				   //退出gdb调试器

Linux开发工具gdb,到这里就介绍结束了,本篇文章对你由帮助的话,期待大佬们的三连,你们的支持是我最大的动力!

文章有写的不足或是错误的地方,欢迎评论或私信指出,我会在第一时间改正

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

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

相关文章

博客质量分计算——发布 version 5.0

目录 1. 背景2. 质量分 version 5.02.1 version 4 存在问题分析2.2 version 5.0 改进2.3 消融分析2.3.1 正向积极得分消融实验2.3.2 正向累积得分单变量实验2.3.3 非高分文章消融实验 2.4 V4 和 V5.0 版本质量分分布对比 3. 总结4. 参考 1. 背景 博客质量分顾名思义是用于衡量…

最新CMS指纹识别技术

点击星标,即时接收最新推文 本文部分节选于《web安全攻防渗透测试实战指南(第二版)》,即将上架,敬请期待。 指纹识别 1.CMS简介 CMS(Content Management System,内容管理系统&#x…

微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录

数据绑定,事件绑定,事件传参与数据同步 1. 数据绑定1.1. 在data中定义数据1.2. 在wxml中渲染数据 (mustache语法) 2. 事件绑定2.1. 事件2.2. 常用的事件2.3. 事件对象的属性列表2.4. target 和 currentTarget的区别 3. 事件传参与…

YOLOv5/v7 引入渐进特征金字塔网络 AFPN 结构 | 《2023年6月28日最新发表》

包含 yolov5-AFPN.yaml 和yolov7-AFPN.yaml 论文地址:https://arxiv.org/pdf/2306.15988.pdf 代码地址:https://github.com/gyyang23/AFPN 多尺度特征在目标检测任务中对于编码具有尺度变化的对象非常重要。一种常见的多尺度特征提取策略是采用经典的自顶向下和自底向上的特…

53 # 反转二叉树

由于我学习的视频这一节跟上一节重复。没找到该节的学习资源,我自己参考网上实现的,有问题还请指出。 如图,下面实现反转 // 节点 class Node {constructor(element, parent) {this.element element; // 存的数据this.parent parent; // …

Stable Diffusion - ReV Animated v1.2.2 的 2.5D 模型与提示词

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131655644 ReV Animated v1.2.2 模型能够创建类似 2.5D 的图像生成。该模型是 checkpoint 合并,是其他模型的产物,以创建源…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html,然后前台会解析成php 没测试最新版 比如编辑专题:/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文: 微擎后…

Unity经营类美食小摊小游戏

Unity经营类美食小摊小游戏 挺有意思的小游戏 关卡页面 游戏主页面 有顾客上门 需要给顾客搭配他们想要的美食 会不断地有顾客过来,这个时候就考验手速的时候了,真实模拟经营 服务到位立马有钱 项目地址: https://download.csdn.net/downl…

PHY芯片的使用(三)在U-boot下网络PHY的移植

1、概述 以太网 PHY 驱动移植,主要包括 Linux、 u-boot 及设备树等三个方面标准框架下的移植。本文以裕太8511PHY为例展开说明。一般国产芯片厂商会提供在uboot/linux下PHY的驱动。在uboot/linux的PHY框架是有区别的,这点要注意。 YT8511 PHY 驱动的移…

数学建模学习之发动机最优生产计划模型求解

问题重述 某工厂向用户提供发动机,按合同规定,其交货数量和日期是:第一季末交 40 台第二季末交 60 台,第三季末交 80 台。工厂的最大生产能力为每季 100 台,每季的生产费用是(元),此处 为该季生产发动机的台数。若工…

(33)接收信号强度指示(RSSI)

文章目录 前言 33.1 在你的自动驾驶仪上设置RSSI 33.2 在MissionPlanner的HUD中显示RC接收器的RSSI值 33.3 连接实例 33.4 特殊用例 前言 本文介绍了如何获取自动驾驶仪的接收信号强度指示(RSSI)。 33.1 在你的自动驾驶仪上设置RSSI RSSI 可通过一…

录音转文字怎么操作?这几个好用的录音转文字的方法分享给你

小伙伴们,你们有没有遇到过这样的情况:想要记录一段重要的会议、讲座或者采访的内容,但是在网页上进行音频转文字的效果不好?别担心,随着科技的不断发展,音频转文字的软件可以很好的解决这些问题。这些神奇…

猿人学第二届第一题找修改位置(非答题)

第二届第一题 AES(魔改) Base64(魔改) MD5 第一题不难,想要得到结果直接扣代码就行,但是我想找找到底修改了哪个位置。 MD5( AES (now page) ) AES加密ECB-pksc7 的 key 标准是128位即 16*8(bit) ,这里666yuanrenxue66 是15位不是标准k…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的实践应用

查看原文>>>基于”Python”多技术融合在蒸散发与植被总初级生产力估算中的实践应用 熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的基本原理;掌握利用Python与ArcGIS工具进行相…

java的默认字节序是big-endian

big-endian就是重要字节先出现,保存在低内存地址,而little-endian正好相反。 在Java中,默认是采用big-endian的。 Java官网虚拟机介绍章节,也明确进行了说明: https://docs.oracle.com/javase/specs/jvms/se20/html/jv…

10.2.7 【Linux】与文件系统及程序的限制关系:ulimit

单一 filesystem 能够支持的单一文件大小与 block 的大小有关。但是文件系统的限制容量都允许的太大了!如果想要让使用者创建的文件不要太大时, 我们是可以考虑用 ulimit 来限制使用者可以创建的文件大小。 10.2.8 变量内容的删除、取代与替换 &#xf…

【SAP UI5 控件学习】DAY04 Input组Part IV 完结List组Part I

1.时间选择器Time Picker 和Data Picker类似,Time Picker允许用户选择相应的时间。 它有以下一些比较常用的属性。 value用于显示Input中的时间的值,这个属性只能接受字符串的值,如果是UI5.getInstance()获取到的时间,需要转化成…

零基础自学网络安全 / 网络渗透攻防路线学习方法【建议收藏】

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 基…

LayUI 实现二级导航栏

目录 实现步骤: 1. 分析数据库 2. 构建数据源 2.1 编写实体类 2.2 编写节点实体类 2.3 构建BuildTree节点结构方法类 2.4 编写dao类 2.5 编写数据Acntion控制类 3. 前台准备 3.1 配置mvc.xml文件 3.2 页面编写 3.3 运行效果 实现步骤: 1. 分…

鼠标右击没有新建WORD、EXCEL、PPT选项卡解决方案

一、WinR打开运行窗口,输入regedit打开注册表 二、进入到相应位置,复制粘贴到路径处即可 ①word word:计算机\HKEY_CLASSES_ROOT\.docx 计算机\HKEY_CLASSES_ROOT\.doc 看你改哪个都行,我觉得修改第一个docx那个就行&#xff0c…