Linux调试器gdb

 1.debug版本的文件才能调试

gcc默认编译生成的是release版本,在输入gcc编译指令时,要加-g,才会生成debug版本的可执行文件。

可以看到,code_dbug比code大,因为debug版本含有调试信息,往往比release版本的数据大。我们用readelf指令查看一下可执行文件中debug的信息 。

我们在code中查看带有debug的信息(忽略大小写),没有找到,但在code_dbug文件中找到了一系列的调试信息。

所以当我们想调试一个文件时,必须生成它的debug版本。

2. 开始调试

我们新建一个目录test_gdb,创建makefile和mycode.c。

 创建可执行文件mycode。

输入gdb mycode。进入gdg调试交互环境。

 输入q或quit退出交互环境。

1.list指令(缩写l):显示代码

输入list或l可以查看代码, 如果要看某行代码,比如第五行代码,可输入l 5。

同时一直按回车建,gdb会执行上一次命令的操作,就会一直展示代码知道展示完。

 如果要查看某个函数,可以输入l+函数名。

 2.run/r指令:运行程序

从开始连续而非单步执行程序。

3.break/b:设置断点 

break(b) 行号:在某一行设置断点break

函数名:在某个函数开头设置断点

这样我们就打了三个断点,分别在19、20、24行。

我们也可以对函数打断点,

还可以对文件中某行或,某个函数打断点,

 

4.info break(b):查看断点信息 

 Num就是断点的序号。如果要删除一个断点,必须通过Num删除。

5.delete/n:删除序号为n的断点

比如,我要删除序号为2的断点,

 注意:如果我们在调试中途退出调试,那么这次调试的信息包括断点信息都会被gdb自动清除,下次调试又要重新设置断点。

注意:因为是19行是空行,gdb会自动跳过空白行赚到最近的有效语句行,所以断点1和断点2地址相同。

6.逐过程调试指令:next/n

打完断点后,我们r,启动程序,会自动跳转到离main函数最近断点的最近有效行。

现在我们输入n,就是逐过程调试,不会进入内嵌函数块中。

 如果我们不输入指令按回车,gdb会默认执行上一个指令。所以我们在第一次输入n后,可以一直按回车,直到显示,这样就调试到程序运行结束了(估计bug还没找到)。

现在我们在info b,会发现每个断点下都显示断点命中次数。

 7.逐语句调试指令:step/s

我们删除序号1的断点,在18行添加 一个断点, 开始调试,r

如果我们想逐语句调试,想进入addToTop函数内部,输入s即可, 

然后我们可以一直按回车,就会逐语句调试,注意:如果语句已经是最基本的C式语言了,逐语句无法进入C非自定义函数内部,逐语句就相当于逐过程。

 这样我们就进入addToTop函数内部的for循环中。

8.查看变量的值/地址:print/p

如果我们在调试过程中要查看某个变量,只要输入p+变量名。

但这样调试下一句,就又要重新输入p i。

所以我们可以用display。

9.常显示(跟踪)变量:disolay 

 

我们只要将要跟踪的变量用display修饰,每一次调试都会打印变量的值。 

那么如何取消“常显示”呢?

10.取消对先前设置的变量的跟踪:undisplay

我们可以用指令undisplay + “常显示序号”,注意,这里是“+ 变量名”。

 11.跳转所需行:until n(n是行号)

12.执行完当前函数:finish

13.执行到下一个断点:continue/c 

从当前位置开始连续而非单步执行到下一个断点,直到没有断点程序执行结束。这不是跳跃性执行,两个断点间的函数语句都会按语法规则连续性执行。

14.禁用断点:disable

从1号断点直接跳到3号断点,因为2号断点被禁用了。 

禁用后的断点信息中“End”选项就是n,没有禁用就是y。

15.启用禁用的断点:enbale 

16.修改变量的值: set var

 

 相当于条件断点。

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

 18.查看当前栈帧局部变量的值:info(i) locals

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

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

相关文章

【BUG】已解决:SyntaxError:positional argument follows keyword argument

SyntaxError:positional argument follows keyword argument 目录 SyntaxError:positional argument follows keyword argument 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰&#xff0c…

【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权,请联系删除 转自: 简矽芯学堂 简矽芯学堂 2024年01月18日 09:00 陕西 文章目录 OCC 介绍Fast ScanFull chip ATPGPartition ATPGHierarchical ATPG OCC 介绍 OCC&am…

微信小程序实现聊天界面,发送功能

.wxml <scroll-view scroll-y"true" style"height: {{windowHeight}}px;"><view wx:for"{{chatList}}" wx:for-index"index" wx:for-item"item" style"padding-top:{{index0?30:0}}rpx"><!-- 左…

力扣高频SQL 50题(基础版)第十题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题1661. 每台机器的进程平均运行时间题目说明思路分析实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题 1661. 每台机器的进程平均运行时间 题目说明 表: Activity…

Git merge

Git merge 参考文档&#xff1a; https://marsishandsome.github.io/2019/07/Three_Way_Merge https://git-scm.com/docs/merge-strategies https://stackoverflow.com/questions/56889406/how-does-git-compare-two-files-while-merging Git merge的目标是合并changes&#x…

idea一键为实体类赋值

file -> settings -> plugins -> marketplace 把这个插件装上 找个实体&#xff0c;选中&#xff0c;altenter进入edit界面 我是选择只保留右边这种生成方法&#xff0c;然后选择ok 返回到那个实体&#xff0c;选择&#xff0c;altenter generate生成

创建线程的几种方式

严格来讲&#xff0c;创建线程只有一种方式&#xff0c;就是实现Runnable接口&#xff0c;其他创建线程的方式也是对其封装。 继承Thread方式 public class Thread extends java.lang.Thread {Overridepublic void run() {super.run();} } 进入Thread可以看到&#xff0c;也是…

Spark实时(四):Strctured Streaming简单应用

文章目录 Strctured Streaming简单应用 一、Output Modes输出模式 二、Streaming Table API 三、​​​​​​​​​​​​​​Triggers 1、​​​​​​​unspecified&#xff08;默认模式&#xff09; 2、​​​​​​​​​​​​​​Fixed interval micro-batches&am…

C语言刷题小记2

前言 本篇博客还是为大家分享一些C语言的OJ题目&#xff0c;如果你感兴趣&#xff0c;希望大佬一键三连。多多支持。下面进入正文部分。 题目1竞选社长 分析&#xff1a;本题要求我们输入一串字符&#xff0c;并且统计个数的多少&#xff0c;那么我们可以通过getchar函数来获…

软件开发者消除edge浏览器下载时“此应用不安全”的拦截方法

当Microsoft Edge浏览器显示“此应用不安全”或者“已阻止此不安全的下载”这类警告时&#xff0c;通常是因为Windows Defender SmartScreen或者其他安全功能认为下载的文件可能存在安全风险。对于软件开发者来说&#xff0c;大概率是由于软件没有进行数字签名&#xff0c;导致…

【React】useState:状态更新规则详解

文章目录 一、基本用法二、直接修改状态 vs 使用 setState 更新状态三、对象状态的更新四、深层次对象的更新五、函数式更新六、优化性能的建议 在 React 中&#xff0c;useState 是一个非常重要的 Hook&#xff0c;用于在函数组件中添加状态管理功能。正确理解和使用 useState…

未来的智能交通系统:智能合约在交通管理中的应用前景

随着城市化进程的加快和交通问题日益突出&#xff0c;智能交通系统成为了解决城市交通拥堵和安全问题的重要手段。本文将探讨智能合约在未来智能交通系统中的应用前景&#xff0c;分析其在交通管理中的潜力和优势。 什么是智能交通系统&#xff1f; 智能交通系统利用先进的信息…

MySQL之索引及简单运用

索引&#xff1a; 什么是索引 索引是数据库中一种非常重要的数据结构&#xff0c;用于帮助快速查询数据库表中的数据。它就像一本书的目录&#xff0c;能够让你快速定位到书中的某个具体章节或内容&#xff0c;而不需要一页一页地翻阅整本书。 在数据库管理系统中&#xff0c;…

设计模式 之 —— 单例模式

目录 什么是单例模式&#xff1f; 定义 单例模式的主要特点 单例模式的几种设计模式 1.懒汉式&#xff1a;线程不安全 2.懒汉式&#xff1a;线程安全 3.饿汉式 4.双重校验锁 单例模式的优缺点 优点&#xff1a; 缺点&#xff1a; 适用场景&#xff1a; 什么是单例模…

VBA实例-从Excel整理数据到Word

实现目录 功能需求数据结构复制数据到新sheet并分类数据添加序号、日期、时间三列数据添加序号列添加时间列 将名称和类别复制到word文件中将参数5和参数9中的一个复制到word文件中 实例 功能需求 1、将原始数据中不要的数据剔除 2、原始数据中增加序号、日期和时间三列数据&a…

图片上传成功却无法显示:静态资源路径配置问题解析

1、故事的背景 最近&#xff0c;有个学弟做了一个简单的后台管理页面。于是他开始巴拉巴拉撘框架&#xff0c;写代码&#xff0c;一顿操作猛如虎&#xff0c;终于将一个简单的壳子搭建完毕。但是在实现功能&#xff1a;点击头像弹出上传图片进行头像替换的时候&#xff0c;卡壳…

三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指

随着7月的脚步渐近&#xff0c;科技界的目光再次聚焦于三星&#xff0c;它即将在法国巴黎举办今年的第二场Unpacked发布会。这不仅是一场新品的展示&#xff0c;更是三星对创新科技的一次深刻诠释。 从Galaxy Z Fold 6的全新设计&#xff0c;到Galaxy Z Flip 6的显著升级&…

CSS实现表格无限轮播

<div className{styles.tableTh}><div className{styles.thItem} style{{ width: 40% }}>报警名称</div><div className{styles.thItem} style{{ width: 35% }}>开始时间</div><div className{styles.thItem} style{{ width: 25% }}>状态&…

《后端程序猿 · @Value 注释说明》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【Unity PC端打包exe封装一个并添加安装引导】

Unity PC端打包exe封装一个并添加安装引导 比特虫在线制作ico图标ico图标转换工具 选中打包出来的所有文件和ico图标 右键 使用RAR软件 添加到压缩文件 两个名称要相同 设置完点击确认等待压缩完成 然后就可以使用 Smart Install Maker制作引导安装程序了