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.…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果,支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
