当前位置: 首页 > news >正文

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 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 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中的容器编排概述 作为一种高效的编程语言&#xff0c;其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程&#xff0c;典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…...

【51项目】51单片机自制小霸王游戏机

视频演示效果: 纳新作品——小霸王游戏机 目录: 目录 视频演示效果: 目录: 前言:...

ArkTs之NAPI学习

1.Node-api组成架构 为了应对日常开发经的网络通信、串口访问、多媒体解码、传感器数据收集等模块&#xff0c;这些模块大多数是使用c接口实现的&#xff0c;arkts侧如果想使用这些能力&#xff0c;就需要使用node-api这样一套接口去桥接c代码。Node-api整体的架构图如下&…...

【数据库初阶】MySQL中表的约束(上)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 MySQL…...

173. 矩阵距离 acwing -多路BFS

原题链接&#xff1a;173. 矩阵距离 - AcWing题库 给定一个 N行 M 列的 01矩阵 A&#xff0c;A[i][j] 与 A[k][l]]之间的曼哈顿距离定义为&#xff1a; dist(i,j,k,l)|i−k||j−l|| 输出一个 N 行 M 列的整数矩阵 B&#xff0c;其中&#xff1a; B[i][j]min1≤x≤N,1≤y≤M,A…...

Linux下部署Redis集群 - 一主二从三哨兵模式

三台服务器redis一主二从三哨兵模式搭建 最近使用到了redis集群部署&#xff0c;使用一主二从三哨兵集群部署redis&#xff0c;将自己部署的过程中的使用心得分享给大家&#xff0c;希望大家以后部署的过程减少一些坑。 服务器准备 3台服务器 &#xff0c;确定主redis和从red…...

实战设计模式之建造者模式

概述 在实际项目中&#xff0c;我们有时会遇到需要创建复杂对象的情况。这些对象可能包含多个组件或属性&#xff0c;而且每个组件都有自己的配置选项。如果直接使用构造函数或前面介绍的工厂方法来创建这样的对象&#xff0c;可能会导致以下两个严重问题。 1、参数过多。当一个…...

活动预告 | Microsoft Azure 在线技术公开课:使用 Azure OpenAI 服务构建生成式应用

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure OpenAI 服务构建生成式应用”活动&#xff0c;了解如何使用包括 GPT 在内的强大的…...

ubuntu安装firefox

firefox下载地址&#xff1a;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章课后习题答案

第四章 网络层 详细计算机网络&#xff08;谢希仁-第八版&#xff09;第四章习题全解_计算机网络第八版谢希仁课后答案-CSDN博客 1.网络层向上提供的服务有哪两种&#xff1f;是比较其优缺点。网络层向运输层提供 “面向连接”虚电路&#xff08;Virtual Circuit&#xff09;服…...

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 技术演进的动力 对于新技术&#xff0c;我们应该站在行业的角度上思考&#xff0c;哪些技术我们要采取&#xff0c;哪些技术我们不能用&#xff0c;投入成本过大会不会导致满盘皆输&#xff1f;市场、技术、管理三者组成的业务发展铁三角&#xff0c;任何一个…...

python +tkinter绘制彩虹和云朵

python tkinter绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…...

重新整理机器学习和神经网络框架

本篇重新梳理了人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、神经网络&#xff08;NN&#xff09;和深度学习&#xff08;DL&#xff09;之间存在一定的包含关系&#xff0c;以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…...

TypyScript从入门到精通

TypyScript从入门到精通 TypyScript 是什么&#xff1f;增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型&#xff1a;3.…...

【MATLAB】绘制投资组合的有效前沿

文章目录 一、数据准备二、有效前沿三、代码3.1 数据批量读取、预处理3.2 绘制可行集3.3 绘制有效前沿3.4 其它-最大夏普率 一、数据准备 准备多个股票的的历史数据&#xff0c;目的就是找到最优的投资组合。 下载几个标普500里面的公式的股票数据吧&#xff0c;下载方法也可…...

matlab时频分析库

time frequency gallery...

GBase 8s 数据库备份还原

每一天都是一个新的篇章&#xff0c;等待着你去书写属于自己的故事&#xff01;&#xff01;&#xff01; 一&#xff1a;备份 1.1.下载脚本文件&#xff0c;并上传到数据库服务器上相应目录。 解压后目录为&#xff1a; 说明&#xff1a; dbcomm.sh&#xff1a;导出注释脚本…...

C++模板相关概念汇总

文章目录 一、模板的概念与作用二、函数模板模板的非类型参数调用顺序 三、类模板四、模板的编译模型 一、模板的概念与作用 C模板是一种强大的代码复用机制&#xff0c;它允许程序员编写通用的代码&#xff0c;能够处理不同类型的数据&#xff0c;而无需为每种类型都重复编写…...

MYSQL------sql基础

SQL基础与简介 定义&#xff1a;SQL即结构化查询语言&#xff08;Structured Query Language&#xff09;&#xff0c;是一种特殊目的的编程语言&#xff0c;用于存取数据以及查询、更新和管理关系数据库系统。作用&#xff1a;可以用于数据库的创建、数据的插入、查询、更新和…...

React Router 用法概览

React Router 用法 React 使得开发者能够轻松地创建交互式的单页应用&#xff08;SPA&#xff09;&#xff0c;单页应用的一个常见挑战是如何处理页面导航和路由吗&#xff0c;React Router 就是解决这个问题的工具 路由&#xff08;Router&#xff09;是 React Router 的核心…...

网络安全之高防IP的实时监控精准防护

高防IP是一种网络安全设备&#xff0c;用于保护网络服务不受到各类攻击的影响&#xff0c;确保业务的持续稳定运行。它通过监控、识别和封锁恶意攻击流量&#xff0c;提供高级别的防护&#xff0c;降低业务被攻击的风险&#xff0c;并提升网络的稳定性和可靠性。 一、实时监控的…...

2024年中国新能源汽车用车发展怎么样 PaperGPT(二)

用车趋势深入分析 接上文&#xff0c;2024年中国新能源汽车用车发展怎么样 PaperGPT&#xff08;一&#xff09;-CSDN博客本文将继续深入探讨新能源汽车的用车强度、充电行为以及充电设施的现状。 用车强度 月均行驶里程&#xff1a;2024年纯电车辆月均行驶超过1500公里&…...

LINUXC 时间相关操作

文章目录 时间戳获取本地时间struct tm 结构体高精度的时间struct timeval 结构体相关函数time()localtime()gmtime()gettimeofday()strftime()mktime() 示例代码 时间戳 时间戳是指计算机中存储的数字型时间。它是以一个特定的时间点作为起点&#xff08;通常是1970年1月1日0…...

网络游戏之害

网络游戏之害&#xff1a; 网络游戏于今之世风靡四方&#xff0c;其娱人耳目、畅人心怀之效&#xff0c;固为人知&#xff0c;然所藏之害&#xff0c;若隐伏之暗潮&#xff0c;汹涌而至时&#xff0c;足以覆舟&#xff0c;尤以青年为甚&#xff0c;今且缕析其害&#xff0c;以…...