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

【Linux】调试器——gdb使用

目录

一、预备知识

二、常用指令

三、调试技巧

(一)监视变量的变化指令 watch

(二)更改指定变量的值 set var


正文

一、预备知识

程序的发布形式有两种,debug和release模式,Linux gcc/g++出来的二进制程序默认是release模式。

要使用gdb调试,必须在源代码生成二进制程序的时候加上-g 选项,如果没有程序无法编译。

gdb还有个不友好的点是调试时无法直接看到源码,所以使用cgdb调试器。


以下是调试中用到的代码,先创建一个mycmd.c文件将下面代码写入,gcc mycmd.c -o mycmd生成可执行文件然后开启我们的调试之旅

二、常用指令

(1)进入cgdb 调试界面

cgdb 文件名:cgdb mycmd

(2)显示源代码:list/l

list/l:                             显示源代码

list/l 函数名:                 列出指定函数的源代码         list/l main

list/l 文件名:行号 :        列出指定文件的源代码         list/l mycmd.c:1

(3)退出指令:quit

(4)打断点指令:break/b

break/b 行号: 在指定行设置断点,该行数会有高亮提醒,对应VS调试中的F9操作

        

(5)查看断点指令: info b/break

info b:查看所有断点信息,前面的1、2...数字表示断点的个数编号,编号根据打断点次数依次递增不受删除断点影响

(6)删除断点指令:delete/d

d 断点编号:删除断点必须通过编号删除,要知道编号得先执行查看获取

删除第2编号断点,再次查看已没编号2

(7)删除所有断点指令:delete/d  breakpoints

(8)从程序开始连续执行指令:run/r

第一:gdb启动调试时只是开启了gdb,程序并没有被调试起来必须输入r

第二:run/r表示在gdb场景中启动我们的程序mycmd

第三:在没打任何断点的情况下run/r从头开始执行程序

第四:有断点run/r执行程序时跳到第一个断点处开始执行

(9)逐过程调试指令:n/next

单步执行,不进入函数内部,对应VS调试中的F10

(10)逐语句调试指令:s/step

单步执行,进入函数内部,对应VS调试中的F11

(11)跟踪变量值的指令:display 变量名

在循环过程中想观察变量的数值变化可以使用此语句,display后最前面的数字表示变量编号,对应VS调试中的监视窗口

(12)取消变量值跟踪指令:undisplay 编号

需要通过变量编号删除

(13)执行到指定行号指令:until 目标行号

如果在调试过程中循环语句要执行100次,而你又确定报错一定不在循环中,可以until+目标行号,直接执行完循环到指定行处

(14)运行到下一个断点处指令:continue/c

运行到下一个断点处或直接运行结束

(15)查看当前栈各级函数调用及参数:bt

程序执行到函数时会向栈申请空间,这句代码旨在查看当前执行到这堆栈被调用情况,以下代码只有一个sum函数。

对应VS调试中的堆栈调用监视窗口

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

也就是当前在debug下的程序信息

(17)禁用所有断点指令:disable breakpoints

为什么禁用断点而不直接删除:调试过程中你可能没有发现问题,并且程序还跑得过去可当你关闭调试,执行代码时程序又报错,如果你直接删除断点无法在之前的调试基础上再次调试,所以禁用断点是为了保留调试痕迹。

没被禁用的断点在查看时Enb下显示y:

disable breakpoints禁用所有断点后Enb下显示n:

(18)启用所有断点指令:enable breakpoints

以上的18点调试技巧足以让我们进行代码调试,有兴趣的同学可以继续了解更多其他调试语句~

三、调试技巧

(一)监视变量的变化指令:watch

在整个程序中你有定义一些静态变量或者一些不应该修改的变量,但你怀疑它修改了导致程序报错,你可以watch它,如果这个变量在运行过程中变了就会通知你

所以断点的类型除了breakpoint 还有watchpoint的形式

(二)更改指定变量的值:set var

指的是在调试中你怀疑导致代码出错的是某个原本不可变变量值,而你此时只是猜测不想直接动源代码改值,可以使用set var更改变量值看是否还报错。


以上是gdb的基础调试语句,看到这希望对你有帮助。

相关文章:

【Linux】调试器——gdb使用

目录 一、预备知识 二、常用指令 三、调试技巧 (一)监视变量的变化指令 watch (二)更改指定变量的值 set var 正文 一、预备知识 程序的发布形式有两种,debug和release模式,Linux gcc/g出来的二进制…...

Windows10清理机器大全集

Windows10清理机器大全集 写在前面先这么个标题,逐渐补充禁止Update移除Microsoft Compatibility Telemetrywindows-defender-remover其它 写在前面 看到标题,读者已经就吐了。 我是说,我非常认可: IT从业者,如果你银子比较充足&…...

解决IDEA中maven找不到依赖项的问题

直接去官网找到对应的依赖项jar包,并且下载到本地,然后安装到本地厂库中。 Maven官网:https://mvnrepository.com/ 一、使用mvn install:install-file命令 Maven提供了install:install-file插件,用于手动将jar包安装到本地仓库…...

端游熊猫脚本游戏精灵助手2025游戏办公脚本工具!游戏脚本软件免费使用

在当下这个崇尚高效与便捷的时代,自动化工具已然成为诸多开发者与企业提升工作效率的关键选择。熊猫精灵脚本助手作为一款极具实力的自动化工具,凭借其多样的功能以及广泛的应用场景,逐步成为众多用户的首要之选。 熊猫精灵脚本助手整合了丰…...

知识就是力量——物联网应用技术

基础知识篇 一、常用电子元器件1——USB Type C 接口引脚详解特点接口定义作用主从设备关于6P引脚的简介 2——常用通信芯片CH343P概述特点引脚定义 CH340概述特点封装 3——蜂鸣器概述类型驱动电路原文链接 二、常用封装介绍贴片电阻电容封装介绍封装尺寸与功率关系&#xff1…...

第4.1节:使用正则表达式

1 第4.1节:使用正则表达式 将正则表达式用斜杠括起来,就能用作模式。随后,该正则表达式会与每条输入记录的完整文本进行比对。(通常情况下,它只需匹配文本的部分内容就能视作匹配成功。)例如,以…...

Linux目录及文件管理

目录 一.Linux目录基本结构 1.常见目录及其作用 二.常用文件处理命令 1.七类常见的linux的文件 2.cat(查看文件内容) 3.more(分页查看文件内容) 4.less(分页查看文件内容) 5.head(从头部查看文件内容&#xff0…...

【MySQL】从零开始:掌握MySQL数据库的核心概念(五)

由于我的无知,我对生存方式只有一个非常普通的信条:不许后悔。 前言 这是我自己学习mysql数据库的第五篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。 上一期笔记是关于mysql数据库的增删查改,没看的同学可以过去看看&#xf…...

进军场景智能体,云迹机器人又快了一步

(图片来源:Pixels) 2025年,AI和机器人行业都发生了巨大改变。 数科星球原创 作者丨苑晶 编辑丨大兔 2025年,酒店行业正掀起一股批量采购具备AI功能的软硬一体解决方案的热潮。 在DeepSeek、Manus等国产AI软件的推动…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.2.1 多字段权重控制(标题、品牌、类目)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 电商商品搜索实战:多字段权重控制策略1. 业务场景与核心挑战1.1 典型搜索问题1.2 权重失衡的影响数据 2. 权重控制核心方案2.1 字段权重分配矩阵2.2 多策略组合方…...

Ubuntu24.04 离线安装 MySQL8.0.41

一、环境准备 1.1 官方下载MySQL8.0.41 完整包 1.2 上传包 & 解压 上传包名称是:mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundle.tar # 切换到上传目录 cd /home/MySQL8 # 解压: tar -xvf mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundl…...

【Django】教程-3-数据库相关介绍

【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 4.数据库连接配置 需要手动创建数据库,数据库无法自动创建 ,ORM可以创建表,操作表 注意:负责app下mondels.py写类时,无法在数据库中…...

OpenGL绘制文本

一:QPainter绘制 在 OpenGL 渲染的窗口中(如 QOpenGLWidget),通过 QPainter 直接绘制文本。Qt 会自动将 2D 内容(文本、图形)与 OpenGL 内容合成。在paintGL()里面绘制,如果有其他纹理&#xf…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

【解决】导入PNG图片,转 Sprite 格式成功但资产未生效问题

开发平台:Unity 6.0 图片格式:.png   问题描述 当 PNG 成功转换为 Sprite(精灵)时,资产状态将显示扩展箭头,即表明该资产可 Sprite 使用。 解决方法:设置正确的 Sprite Mode Single 关于 Spr…...

【科研绘图系列】R语言绘制重点物种进化树图(taxa phylogenetic tree)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图输出图片系统信息介绍 【科研绘图系列】R语言绘制重点物种进化树图(taxa phylogenetic tree) 加载R包 library(tidyverse) library(ape…...

Flutter入门教程:从零开始的Flutter开发指南

Flutter入门教程:从环境搭建到应用发布 概述 本文提供了全面的Flutter入门教程,涵盖环境搭建、基础Widget使用、界面设计与美化,以及实战项目开发等内容。通过本教程,开发者能够快速上手Flutter开发,掌握开发跨平台应…...

CentOS 7 源码安装libjsoncpp-1.9.5库

安装依赖工具 sudo yum install cmake make gcc cmake 需要升级至 3.8.0 以上可参考:CentOS安装CMakegcc 需要升级至9.0 以上可参考:CentOS 7升级gcc版本 下载源码 wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.…...

调用高德天气Api,并展示对应天气图标

1、申请高德key 点击高德官网申请 必须有key才能调用高德api 小提示:每日/每秒调用api次数有限,尽量不要循环调用。 每日大概5000,每秒3次 2、查看文档 高德官网天气api接口文档 请求示例: https://restapi.amap.com/v3/weat…...

DSP开发板的JTAG接口

(1)普中DSP28335 (2)研旭DSP28388 (3)延华DSP28335 (3)M新动力28377D电机控制板...

1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块

盛铂SWFA300捷变频频率综合器模块简述: 盛铂科技国产SWFA300捷变频频率综合器是一款在频率范围内任意两点频率的跳频时间在500nS以内的高速跳频源,其输出频率范围为1.25GHz至20GHz,频率的最小步进为10kHz。同时它拥有优秀的相位噪声特性&…...

nestjs 多环境配置

这里使用yaml进行多环境配置,需要安装nestjs/config、js-yaml、types/js-yaml js-yaml、types/js-yaml 主要用来读取yaml文件以及指定类型使用 官方教程:Documentation | NestJS - A progressive Node.js framework 1、下载 npm i --save nestjs/confi…...

CentOS7系统更新yum源教程

由于CentOS 7 在2024年6月30号以后官方不再维护。很多yum源也陆续关掉了,所以我们要更换镜像源。yum是一个用于软件包管理的工具,它能够从特定的存储库中自动下载和安装软件包。然而,系统默认的yum源可能不包含所有软件包,因此需要…...

Python正则表达式(二)

目录 六、re.findall()函数和分组 1、0/1分组情况 2、多分组情况 七、或“|”的用法 1、作用域 2、用法 八、贪婪模式和懒惰模式 1、量词的贪婪模式 2、量词的懒惰模式 九、匹配对象 1、相关函数 六、re.findall()函数和分组 1、0/1分组情况 在正则表达式中&#x…...

MySQL中如何进行SQL调优?

SQL 调优是提高 MySQL 数据库性能的关键环节。以下是 MySQL SQL 调优的主要方法和技巧 一、使用 EXPLAIN 分析查询 EXPLAIN SELECT * FROM users WHERE user_name 张三;查看执行计划,了解 MySQL 如何处理查询重点关注 type、key、rows、Extra 列type 最好能达到 …...

Android15查看函数调用关系

Android15 Camera3中打印函数调用栈 1.使用CallStack跟踪函数调用 修改涉及三个内容: Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。代码中包含CallStack的头文件。代码中调用CallStack接口,打印函数调用栈。 例子&am…...

Containerd+Kubernetes搭建k8s集群

虚拟机环境设置&#xff0c;如果不是虚拟机可以忽略不看 1、安装配置containerd 1.1 添加 Kubernetes 官方仓库 安装cri-tools的时候需要用到 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kub…...

【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发

系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目&#xff08;含完整前端后端代码&#xff09;【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲&#xff1a;核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…...

个人学习编程(3-24) 数据结构

括号的匹配&#xff1a; if((s[i]) && now() || (s[i]] && now[)){ #include <bits/stdc.h>using namespace std;int main() {char s[300];scanf("%s",&s);int i;int len strlen(s);stack <char> st;for (i 0; i < len; i){if(…...

比特币等虚拟货币实时价格使用说明,数字货币价格获取,k线获取,实时价格获取

数据截图 k线数据 websocket 实时价格数据 根据这些数据可以做出自己的产品 获取时间段内的k线数据 在开始之前&#xff0c;你需要知道的知识&#xff1a; 币种缩写英文名币种IDBTCBitcoinbitcoinETHEthereumethereumEOSEOSeosUSDTTethertetherLTCLitecoinlitecoinUSDDol…...

【漏洞修复】为了修复ARM64 Android10系统的第三方库漏洞,将ARM64 Android16的系统库直接拷贝到Android10系统如何?

直接替换系统库的风险分析 将高版本Android&#xff08;如Android 16&#xff09;的系统库直接拷贝到低版本系统&#xff08;如Android 10&#xff09;可能会导致以下问题&#xff1a; 符号与依赖不兼容 高版本库可能依赖更高版本的NDK或Bionic libc&#xff08;Android的C库&…...

【深度学习与实战】2.1、线性回归模型与梯度下降法先导

import numpy as np# 数据准备 X np.array([1, 2, 3]) y np.array([3, 5, 7])# 参数初始化 w0, w1 0, 0 alpha 0.1 n len(X)# 迭代10次 for epoch in range(10):# 计算预测值y_pred w1 * X w0# 计算梯度grad_w0 (1/n) * np.sum(y_pred - y)grad_w1 (1/n) * np.sum((y_…...

SQL Server 2008安装教程

目录 一.安装SQL Server 二.安装SQL Server Management Studio 三.使用SQL Server Management Studio 一.安装SQL Server 官网下载:SQL Server 下载 | Microsoft 1.选择安装中的全新安装如下图 2.功能选择 3.实例配置 4.后面一直下一步到数据库引擎配置 密码自己设置 系统…...

协作机械臂需要加安全墙吗? 安全墙 光栅 干涉区

安全墙是什么 文章目录 安全墙是什么简介1. 物理安全墙1.1 定义&#xff1a;1.2 作用机制&#xff1a;1.3 应用场景&#xff1a; 2. 虚拟安全墙2.2 定义&#xff1a;2.3 作用机制&#xff1a;2.3 应用场景&#xff1a; 3. 安全毛毯3.1 工作原理&#xff1a;3.2 特点3.3 应用场景…...

Android第六次面试总结(自定义 View与事件分发)

在 Android 中实现自定义 View 处理 1 万条数据的流畅滑动&#xff0c;需结合视图复用、按需绘制、硬件加速等核心技术。以下是具体实现方案&#xff1a; 一、核心优化策略 1. 视图复用机制&#xff08;类似 RecyclerView&#xff09; ViewHolder 模式&#xff1a;将每个数据…...

深度解读 AWS IAM:身份访问管理与安全的核心纽带

导语 在 AWS&#xff08;亚马逊云服务&#xff09;的生态体系中&#xff0c;AWS IAM&#xff08;Identity and Access Management&#xff09;犹如坚固的堡垒&#xff0c;守护着用户在云端的各类资源。它不仅是管理用户身份与访问权限的关键工具&#xff0c;更是维系 AWS 安全…...

Oracle相关的面试题

以下是150道Oracle相关的面试题&#xff0c;涵盖了Oracle的基础概念、架构、SQL与PL/SQL、性能调优、高可用性、备份与恢复、安全、分区与索引、存储与内存管理、网络与连接、版本与升级等方面&#xff0c;希望对你有所帮助。 Oracle基础概念 1. 什么是Oracle数据库&#xff1…...

DQL语句-distinct去重

MySQL | DQL语句-distinct去重 &#x1fa84;个人博客&#xff1a;https://vite.xingji.fun 查询工作岗位 select job from emp;mysql> select job from emp;----------- | job | ----------- | CLERK | | SALESMAN | | SALESMAN | | MANAGER | | SALESMAN …...

GroupDocs.Total for Java 摸索学习

继Aspose.Total for Java 全套组件的学习之后&#xff0c;发现了GroupDocs.Total系列产品的13款&#xff0c;也是花了许久的事件&#xff0c;逐个的学习摸索、深度分析、总结实践&#xff0c;掌握了它们的科学使用。 商业技术软件&#xff0c;作为技术广度学习探索使用&#x…...

⑦(ACG-网络配置)

网络配置是指对计算机网络的各种参数进行设置和调整&#xff0c;以实现网络正常运行和高效通信。网络配置包括多方面的内容&#xff0c;常见的配置包括&#xff1a; 1. IP地址设置&#xff1a;IP地址是设备在网络中的身份标识&#xff0c;设置IP地址是网络配置的基础&#xff…...

智能汽车图像及视频处理方案,支持视频智能包装能力

美摄科技的智能汽车图像及视频处理方案&#xff0c;通过深度学习算法与先进的色彩管理技术&#xff0c;能够自动调整图像中的亮度、对比度、饱和度等关键参数&#xff0c;确保在各种光线条件下&#xff0c;图像都能呈现出最接近人眼的自然色彩与细节层次。这不仅提升了驾驶者的…...

【电子通识】铅笔硬度简史:从石墨到工业标准

在工作中我们会发现有时要使用铅笔硬度计来测试材料的硬度。 比如说手机的液晶屏&#xff0c;我们可能要求要通过3H、4H等等。那么为什么会用铅笔来做硬度测试呢&#xff1f;这就要知道相关的历史了。 铅笔硬度简史&#xff1a;从石墨到工业标准 “一支铅笔&#xff0c;如何成…...

前端自动化测试(一):揭秘自动化测试秘诀

目录 [TOC](目录)前言自动化测试 VS 手动测试测试分类何为单元测试单元测试的优缺点优点缺点 测试案例测试代码 测试函数的封装实现 expect 方法实现 test 函数结语 正文开始 &#xff0c; 如果觉得文章对您有帮助&#xff0c;请帮我三连订阅&#xff0c;谢谢&#x1f496;&…...

《Python实战进阶》No37: 强化学习入门:Q-Learning 与 DQN-加餐版1 Q-Learning算法可视化

在《Python实战进阶》No37: 强化学习入门&#xff1a;Q-Learning 与 DQN 这篇文章中&#xff0c;我们介绍了Q-Learning算法走出迷宫的代码实践&#xff0c;本文加餐&#xff0c;把Q-Learning算法通过代码可视化呈现。我尝试了使用Matplotlib实现&#xff0c;但局限于Matplotli…...

将ZABBIX结合AI实现自动化运维

1. 执行摘要 评估将ZABBIX监控系统与人工智能&#xff08;AI&#xff09;相结合&#xff0c;以实现自动化IT运维的可行性。这种集成具有显著的潜力&#xff0c;能够提升IT运维的效率、可靠性和主动性。通过利用ZABBIX强大的监控和告警功能&#xff0c;以及AI在异常检测、根因分…...

Go 语言规范学习(2)

文章目录 VariablesTypesBoolean typesNumeric typesString typesArray typesSlice typesStruct typesPointer typesFunction typesInterface typesBasic interfacesEmbedded interfacesGeneral interfaces【泛型接口】Implementing an interface【实现一个接口】 Map typesCha…...

XCode中使用MonkeyDev开发iOS版的Comand-line Tool的daemon程序

前提条件&#xff1a;iphone手机越狱ios15&#xff0c;cydia/Sileo中安装好ssh&#xff0c;ldid等相关的常用插件 备注&#xff1a;如何iphone是ios15以下的越狱机&#xff0c;可直接看11步 1. 安装MonkeyDev sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercon…...

Nodejs上传文件的问题

操作系统&#xff1a;window和linux都会遇到 软件环境&#xff1a;v20.10.0的Nodejs 1、前端代码如下&#xff1a; 2、后端Nodejs 2.1、注册接口 2.2、上传接口 其中memoryUpload方法代码如下&#xff1a; 3、用页面上传文件 查看具体报错原因&#xff1a; TypeError: sourc…...

SpringMVC 拦截器详解与实战

在 SpringMVC 框架中&#xff0c;拦截器&#xff08;Interceptor&#xff09;是一种强大的机制&#xff0c;它允许开发者在控制器方法执行前后进行拦截&#xff0c;从而实现诸如用户权限验证、日志记录、性能监控等各种功能。本文将深入探讨 SpringMVC 拦截器的相关知识&#x…...

5.3 MVVM模型

一、MVVM的基本概念 MVVM的基本概念&#xff1a;Model、View、ViewModel 组件职责示例内容Model封装业务数据User类&#xff0c;包含姓名、年龄属性View负责UI呈现XAML界面&#xff0c;包含数据绑定ViewModel连接View和Model&#xff0c;处理视图逻辑MainViewModel包含命令和…...