【Linux】[gdb]Linux环境下如何调试代码

一、code.c文件

我们首先创建一个code.c文件,写一段简单代码,用于测试。

 

二、makefile文件

然后,我们可以编写makefile文件,使得code.c文件能够进行编译。(当然也可以不写makefile文件,直接对code.c进行编译)

 如果没有-g ,则是以release模式编译该程序

三、使用gdb调试

一般情况下,gdb是默认安装好了的。

1、 生成mybin文件(可执行程序)

2、gdb打开关闭

(1)gdb 可执行程序

 

(2)quit/q

使用quit或者q退出

 

 

3、调试 

 (1)list/l (显示代码)

功能:打开代码,显示代码及行号

注意:一次list 可能不能完整显示所有代码,所以需要多次回车(直接回车就是上一个命令)(也可以再次使用list命令,效果一样)。

此外,我们还可以使用  l 数字(比如: l 1),使得从第1行开始显示

 (2)run/r(执行)

功能:执行(若不打断点,则直接运行到结束)

以下即为不打断点的结果

(3)break/b 数字(行号)等(例:b 5) (打断点)

功能;打断点

也可以使用 b 函数名 来打断点

 比如: b main 

就是在main函数入口处打断点

 

(4)info b(显示断点)

功能:显示断点

 

 

(5)d 编号(删除断点)

功能:删除断点

注意:删除断点只能通过Num列的序号来删除

即使删除断点,断点的编号也会一直增加

而退出gdb,重新进入时,则之前的断点全部清空

 

 (6)disable 编号(禁用断点)

例:disable 1

若不禁用断点1,则是以下执行结果:

我们此时禁用断点1,则执行结果如下: 

由于调试已经开始,它问我们是否从头开始执行,我们输入:y(表示yes) 

 

 再次输入r命令,执行结果如下:

(7)enable 编号(启用断点)

例:enable 1 

 

(8)next/n (逐过程调试(类似于VS中的F10))

注: 如果遇到有调用函数时,则不会跳到该函数处。

 

(9)step/s (逐语句调试(类似VS中的F11))

 注: 如果遇到有调用函数时,则会跳到该函数处。

(10)p 变量名/地址等(显示)

例:p i   

p &i

 

(11)display  变量名/地址(长显示)

例:display i

display &i 

 

当我们 调试时,display的变量会一直显示

(12)undisplay 编号(取消长显示)

 

(13)until 行号 (运行到指定的位置)

 

(14)finish (运行至该函数结束)

功能:运行至当前函数的结尾

(15)continue/c (运行至下一断点处)

我们首先增加一个断点

 然后使用continue:

(16)bt  : 查看调用堆栈

 

 

(17)set var (更改变量的值)

例:set var i = 9

 

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

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

相关文章

大选择核网络在遥感目标检测中的应用

摘要 论文链接:https://arxiv.org/pdf/2303.09030.pdf 最近关于遥感目标检测的研究主要集中在改进有向边界框的表示,但忽略了遥感场景中呈现的独特先验知识。这种先验知识很有用,因为如果没有参考足够远的上下文,可能会错误地检测…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

😀前言 设计模式,作为软件工程领域的核心概念之一,向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码,而且也促进了代码的复用性。通过这篇文章,我们…

windows系统下pycharm配置anaconda

参考:超详细的PycharmAnconda安装配置教程_pycharm conda_罅隙的博客-CSDN博客 下载好anaconda安装后,比如我们安装在D盘anaconda文件夹下,在pycharm配置好环境激活时出现问题,可能是电脑没有配置环境变量 需要将一下4行添加到电…

axb_2019_brop64

axb_2019_brop64 Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)64位,只开了NX __int64 repeater() {size_t v1; // raxchar s[208]; // [rsp0h] [rbp-D0h] BYREFprintf("…

Qt扩展-QCustomPlot 用户交互

QCustomPlot 用户交互 一、概述二、操作范围三、选择机制1. 控制Graph的可选择性和选择状态2. 所选对象的外观3. 多部分对象4. 对选择变化做出反应 四、用户交互信号 一、概述 QCustomPlot提供了多个内置的用户交互。它们大致可以分为 通过用鼠标拖动和滚动鼠标滚轮进行范围操…

MySQL 性能优化

MySQL 性能优化 数据库命名规范 所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,并且最…

微信小程序-1

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 报错在调试器的console里找 一、结构 Ctrl 放大字体 Ctrl - 缩小 设置 - - - 外观设置 - - - 可以修改喜欢的主题颜色 index.js index.json index.wxml 》 html <view class"box&qu…

Ubuntu安装samba服务器

为了window系统下能够像访问本地目录一样访问ubuntu系统下的目录&#xff0c;这里我通过安装samba服务器&#xff0c;将ubuntu系统的文件目录通过网络挂载的方式共享出来&#xff0c;以便在window下就能够对ubuntu系统的文件进行读写等访问操作&#xff0c;这里记录一下samba服…

SpringBoot快速入门

搭建SpringBoot工程&#xff0c;定义hello方法&#xff0c;返回“Hello SpringBoot” ②导入springboot工程需要继承的父工程&#xff1b;以及web开发的起步依赖。 ③编写Controller ④引导类就是SpringBoot项目的一个入口。 写注解写main方法调用run方法 快速构建SpringBoo…

Redis分页+多条件模糊查询组合实现思路

Redis是一个高效的内存数据库&#xff0c;它支持包括String、List、Set、SortedSet和Hash等数据类型的存储&#xff0c;在Redis中通常根据数据的key查询其value值&#xff0c;Redis没有模糊条件查询&#xff0c;在面对一些需要分页、排序以及条件查询的场景时(如评论&#xff0…

MyCat实现分库分表技术

目录 一、分库分表 1.1介绍 1.1.1问题分析 1.1.2拆分策略 1.1.3垂直拆分 1.1.3.1垂直分库 1.1.3.2垂直分表 1.1.4水平拆分 1.1.4.1水平分库 1.1.4.2水平分表 1.1.5实现技术 二、MyCat概述 2.1介绍 2.2下载 2.3安装 2.4目录介绍 2.5概念介绍 三、MyCat入门 3.…

MyBatisPlus(八)范围查询

说明 范围查询&#xff0c;包括&#xff1a; 大于大于等于小于小于等于在范围内在范围外 大于&#xff1a;gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…

MyBatis-plus快速代码生成,使用MybatisX插件

概述 MyBatis提供逆向工程&#xff0c;可以快速生成代码。 而MyBatis-plus也提供了一个代码生成器&#xff0c;它需要执行一些代码来实现。 而MybatisX 是一款基于 IDEA 的快速开发插件&#xff0c;为效率而生&#xff0c;你不需要写代码&#xff0c;直接界面化操作&#xf…

python 学习随笔 4

列表list 将序列前几个进行替换&#xff08;数量可以不同&#xff09; 将序列进行间隔替换&#xff08;必须保证数量相同&#xff0c;否则报错&#xff09; 删除序列内元素 向序列后新增一个元素 向序列后新增多个元素 将序列进行数乘&#xff08;不是产生几个序列哦&#xff0…

三、git的安装和配置

一、安装 1.官网下载&#xff1a;https://git-scm.com/download 下载最新版本&#xff0c;点击红框或篮筐处即可 2.点击下载好的安装包安装这个软件 3.一直点击next&#xff0c;直到出现install&#xff0c;点击install&#xff0c;安装完成后点击finish&#xff1a; 下载完成…

【Mysql专题】视图介绍及其基本操作

前言 前段时间&#xff0c;跟客户开个线上会议&#xff0c;在和对方技术人员讨论到如何把数据给我们的时候&#xff0c;对方说【丢给你们一个视图&#xff0c;你们查视图就好了】我一下子懵了。当时现场贼尴尬&#xff0c;我只能假装断线了&#xff0c;然后又模棱两可的说了几…

【网络安全---ICMP报文分析】Wireshark教程----Wireshark 分析ICMP报文数据试验

一&#xff0c;试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机&#xff08;虚拟机&#xff09; kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置&#xff1a; 编辑-------- 虚拟网路编辑器 更改设置进来以后 &#xff0c;先选择N…

10.1 调试事件读取寄存器

当读者需要获取到特定进程内的寄存器信息时&#xff0c;则需要在上述代码中进行完善&#xff0c;首先需要编写CREATE_PROCESS_DEBUG_EVENT事件&#xff0c;程序被首次加载进入内存时会被触发此事件&#xff0c;在该事件内首先我们通过lpStartAddress属性获取到当前程序的入口地…

阿里云免费服务器无法领取限制说明

阿里云提供免费服务器供用户申请&#xff0c;但是领取免费服务器是有条件的&#xff0c;并不是有所的阿里云用户均可领取免费云服务器&#xff0c;免费服务器领取条件为&#xff1a;账号从未使用过阿里云服务器的用户&#xff0c;阿里云百科来举例说明免费服务器领取说明&#…

STM32复习笔记(六):STM32远程升级BootLoader相关

目录 Preface&#xff1a; &#xff08;一&#xff09;STM32上电启动流程 &#xff08;二&#xff09;BootLoader相关 &#xff08;三&#xff09;Clion配置 Preface&#xff1a; 有关STM32的BootLoader主要还是参考了许多大佬的文章&#xff0c;这里只是简单地列举一下&am…