C语言基础18(GDB调试)
文章目录
- GDB
- GDB概述
- 什么是GDB
- **GDB**的主要功能
- GDB的启动
- GDB常见的启动方式
- GDB的退出
- GDB的常用命令
- GDB查看源代码指令———list(1)
- **GDB** 查看设置**------info**
- **GDB** 查看内存
- **GDB** 设置断点**---break (b)**
- **GDB** 设置观察点**---watch**
- **GDB** 程序调试
- GDB完整使用演示
- 检查你的**Linux**支不支持**GDB**
- 我们可以通过网络在线安装
- 启动**GDB**
- 显示调试的代码
- 设置调试断点
- 调试代码
- 退出**GDB**
GDB
GDB概述
什么是GDB
GDB是GUN开源组织发布的一款强大的Unix/Linux的程序调试工具
GDB的主要功能
1.启动程序,按照程序员要求运行程序。
2.可以让程序在程序员设置的断点处停下来。
3.在程序停止的情况下,可查看程序中的变量等信息。
4.动态改变程序的运行环境。
需要注意的是:
程序在编译的时候需要跟上 -g参数,因为我们默认编译出来的版本是发布版本(Release),会删除一切调试可用信息,便于减小可执行程序的体积,但是我们调试的时候,我们需要保留调试信息,所以需要使用到调试版本(DeBug),所以需要指定参数 -g
GDB的启动
GDB常见的启动方式
在命令行中运行:
(1)gdb:
file <filename>
如果调试的程序需要命令行参数还需要执行如下指令:
set args arg1 arg2 ...
(2)gdb <filename>
如果调试的程序需要命令行参数则执行如下格式指令:
gdb --args <filename> arg1 arg2 ...
GDB的退出
在gdb中执行命令:
quit / q
GDB的常用命令
GDB查看源代码指令———list(1)
显示指定位置的周围的源代码;可以通过行号、文件名、函数名以及三者之间的组合来定位指定位置,显示代码的行数可以通过设置listsize来设定,但是该设置只是本次有效;简化命令:l
set listsize 20 # 每次list显示指定区域的20行代码,默认10行
show listsizelist linenumber # 显示 linenumber附近的代码
list 50 # 显示当前源文件的第50行的附近代码
list function # 显示函数代码
list test.c:30 # 显示指定源文件的第30行的附近代码
list +/- # 向后/前显示源代码
list <first>,<last> # 显示first ,last之间的内容
list 100,200
GDB 查看设置**------info**
info registers # 查看寄存器信息
info frame # 查看栈信息(帧信息)
info locals # 显示当前函数的所有局部变量名及其值
info break/b # 查看断点信息
info args # 显示当前函数的参数名及其值
info prog # 查看调试程序的执行状态
info files # 显示调试文件的详细信息
GDB 查看内存
查看内存变量的值 print (p)
p i
p function::i
自动显示的变量值或表达式值 display
display i # 自动显示变量i的值
info display # 查看自动显示变量的信息
undisplay 1 2 # 取消1,2号自动变量显示
disable display 1 # 暂停显示1号自动变量
enable display 1 # 回复显示1号自动变量
GDB 设置断点**—break (b)**
设定程序在运行过程中在指定的位置停下来,该指定的位置可以为源文件名、函数名、行号中的一个或多个组合的具有唯一性地址
break/b linenum # 通过文件行号设置断点 b 20
break/b funcname # 通过函数名设置断点 b add
break/b linenum if exp # 设置条件断点: b 20 if i==8
断点维护:
info break # 查看断点信息
delete break 1 # 删除编号为1的断点,不带参数删除所有断点
enable break 1 # 启用编号为1的断点,断点信息enb 变为 y
disable break 1 # 禁用编号为1的断点,断点信息enb 变为 n
clear linenum # 清除linenum行上所有断点
GDB 设置观察点**—watch**
watchpoint 观察点,当观察对象的值变化时,会停止程序
watch <exp> # 为表达式或变量设置观察点,一旦值变化停止程序
rwatch <exp> # 当表达式或变量被读时,停止程序
awatch <exp> # 当表达式或变量被读,写时,停止程序
info watchpoints # 查看所有观察点信息
观察点可认为是特殊的断点
GDB 程序调试
启动程序: run # 从main开始运行
continue # 一直执行直到满足停止条件而停止
next/n # 单步执行,遇到函数不进入
step/s # 单步执行,遇到函数进入
finish # 执行当前函数的剩余指令,直到函数返回
GDB完整使用演示
检查你的Linux支不支持GDB
我们一般检测,都是通过查看版本的方式,如果版本能查到,就说明支持,查询不到说明不支持
gdb --version

我们可以通过网络在线安装
sudo apt-get install gdb
启动GDB
启动GDB
gdb

打开需要调试的文件
(1) 针对没有运行参数(main函数参数无需接收)的可执行程序
file 2

上面的命令等价于:
gdb 2

(2) 针对有运行参数(main函数参数需要接收)的可执行程序
set a.txt b.txt ...
显示调试的代码
设置显示的行数
set listsize 20 // 设置显示的行数,默认显示10行
设置从哪一行开始显示
list 1 / l 1 // 1就是起始行号
设置调试断点
设置断点
设定程序在运行过程中在指定的位置停下来,该指定的位置可以为源文件名、函数名、行号中的一个或多个组合的具有唯一性地址
break/b linenum # 通过文件行号设置断点 b 18
break/b funcname # 通过函数名设置断点 b sum
break/b linenum if exp # 设置条件断点: b 20 if i==8
清除断点
info break # 查看断点信息
delete break 1 # 删除编号为1的断点,不带参数删除所有断点
clear linenum # 清除linenum行上所有断点 clear 18
调试代码
运行程序
run # 从main开始运行
continue # 一直执行直到满足停止条件而停止
next/n # 单步执行,遇到函数不进入
step/s # 单步执行,遇到函数进入
finish # 执行当前函数的剩余指令,直到函数返回
打印输出
查看内存变量的值 print (p)
print/p i # 打印输出变量等数据
自动显示的变量值或表达式值 display
display i # 自动显示变量i的值
退出GDB
quit / q
相关文章:
C语言基础18(GDB调试)
文章目录 GDBGDB概述什么是GDB**GDB**的主要功能 GDB的启动GDB常见的启动方式 GDB的退出GDB的常用命令GDB查看源代码指令———list(1)**GDB** 查看设置**------info****GDB** 查看内存**GDB** 设置断点**---break (b)****GDB** 设置观察点**---watch****GDB** 程序调试 GDB完整…...
《向量数据库指南》——应对ElasticSearch挑战,拥抱Mlivus Cloud的新时代
在当今数据驱动的商业环境中,向量数据库的应用正变得愈加重要。随着人工智能和机器学习的快速发展,尤其是在自然语言处理、图像识别及推荐系统等领域,向量数据库以其强大的存储和检索能力,迎来了广泛的应用机会。然而,在实际应用中,企业在选择和实施向量数据库方案时,常…...
c++的stl库中stack的解析和模拟实现
目录 1.stack的介绍和使用 1.1stack的介绍 1.2stack的使用 2.stack的模拟实现 1.stack的介绍和使用 1.1stack的介绍 1. stack 是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stac…...
C语言——字符函数和内存函数
目录 前言 字符函数 1strlen 模拟实现 2strcpy 模拟实现 3strcat 模拟实现 4strcmp 模拟实现 5strncpy 模拟实现 6strncat 模拟实现 7strncmp 模拟实现 8strstr 模拟实现 9strtok 10strerror 11大小写字符转换函数 内存函数 1memcpy 模拟实现 2…...
查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的
问题背景 查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的 [root@lnops overlay2]# du -sh * | grep G 1.7G 30046eca3e838e43d16d9febc63cc8f8bb3d327b4c9839ca791b3ddfa845e12e 435G c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d42149d0070e9d8124f71 1.…...
Golang的容器编排实践
Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言,其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程,典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…...
【51项目】51单片机自制小霸王游戏机
视频演示效果: 纳新作品——小霸王游戏机 目录: 目录 视频演示效果: 目录: 前言:...
ArkTs之NAPI学习
1.Node-api组成架构 为了应对日常开发经的网络通信、串口访问、多媒体解码、传感器数据收集等模块,这些模块大多数是使用c接口实现的,arkts侧如果想使用这些能力,就需要使用node-api这样一套接口去桥接c代码。Node-api整体的架构图如下&…...
【数据库初阶】MySQL中表的约束(上)
🎉博主首页: 有趣的中国人 🎉专栏首页: 数据库初阶 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们,大家好!在这篇文章中,我们将深入浅出地为大家讲解 MySQL…...
173. 矩阵距离 acwing -多路BFS
原题链接:173. 矩阵距离 - AcWing题库 给定一个 N行 M 列的 01矩阵 A,A[i][j] 与 A[k][l]]之间的曼哈顿距离定义为: dist(i,j,k,l)|i−k||j−l|| 输出一个 N 行 M 列的整数矩阵 B,其中: B[i][j]min1≤x≤N,1≤y≤M,A…...
Linux下部署Redis集群 - 一主二从三哨兵模式
三台服务器redis一主二从三哨兵模式搭建 最近使用到了redis集群部署,使用一主二从三哨兵集群部署redis,将自己部署的过程中的使用心得分享给大家,希望大家以后部署的过程减少一些坑。 服务器准备 3台服务器 ,确定主redis和从red…...
实战设计模式之建造者模式
概述 在实际项目中,我们有时会遇到需要创建复杂对象的情况。这些对象可能包含多个组件或属性,而且每个组件都有自己的配置选项。如果直接使用构造函数或前面介绍的工厂方法来创建这样的对象,可能会导致以下两个严重问题。 1、参数过多。当一个…...
活动预告 | Microsoft Azure 在线技术公开课:使用 Azure OpenAI 服务构建生成式应用
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure OpenAI 服务构建生成式应用”活动,了解如何使用包括 GPT 在内的强大的…...
ubuntu安装firefox
firefox下载地址:https://ftp.mozilla.org/pub/firefox/releases/ 卸载 sudo apt-get update dpkg --get-selections |grep firefox apt-get purge firefox 解压 tar -xjf firefox*.tar.bz2复制文件 sudo mv firefox/ /opt/firefox30sudo mv /usr/bin/firefox /…...
计算机网络原理(谢希仁第八版)第4章课后习题答案
第四章 网络层 详细计算机网络(谢希仁-第八版)第四章习题全解_计算机网络第八版谢希仁课后答案-CSDN博客 1.网络层向上提供的服务有哪两种?是比较其优缺点。网络层向运输层提供 “面向连接”虚电路(Virtual Circuit)服…...
RabbitMQ-基本使用
RabbitMQ: One broker to queue them all | RabbitMQ 官方 安装到Docker中 docker run \-e RABBITMQ_DEFAULT_USERrabbit \-e RABBITMQ_DEFAULT_PASSrabbit \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network mynet\-d \rabbitmq:3…...
从零开始学架构——互联网架构的演进
1 技术演进 1.1 技术演进的动力 对于新技术,我们应该站在行业的角度上思考,哪些技术我们要采取,哪些技术我们不能用,投入成本过大会不会导致满盘皆输?市场、技术、管理三者组成的业务发展铁三角,任何一个…...
python +tkinter绘制彩虹和云朵
python tkinter绘制彩虹和云朵 彩虹,简称虹,是气象中的一种光学现象,当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱,由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…...
重新整理机器学习和神经网络框架
本篇重新梳理了人工智能(AI)、机器学习(ML)、神经网络(NN)和深度学习(DL)之间存在一定的包含关系,以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…...
TypyScript从入门到精通
TypyScript从入门到精通 TypyScript 是什么?增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型:3.…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
