Linux中Gdb调试工具常用指令大全

news2025/3/16 5:39:07

1.gdb的安装

如果你是root用户直接用指令 :yum install gdb ;如果你是普通用户用指令:sudo yum install gdb;

2.gdb调试前可以对你的makefile文件进行编写:

下面展示为11.c文件编写的makefile文件:


code-debug:11.c
        gcc -g 11.c -o code-debug 

.PHONY:clean

clean:
        rm -f code-debug

3.开始调试:

当你的makefile编写完成后,你执行了make指令后,生成了可执行程序code-debug;你输入指令:gdb code-debug

出现这个界面说明你进入gdb成功!

接下来是一些常见的指令:

启动与退出

  • gdb <program>:启动 Gdb 并加载指定的可执行文件。例如gdb main,用于调试名为main的可执行程序。
  • quitq:退出 Gdb 调试环境。

程序执行控制

  • runr:启动程序的执行,可带参数,如run arg1 arg2,表示使用参数arg1arg2运行程序。
  • continuec:从当前断点处继续执行程序,直到遇到下一个断点或程序结束。
  • nextn:单步执行程序,遇到函数调用时,不会进入函数内部,直接执行函数调用语句的下一行。
  • step s:单步执行程序,若当前行是函数调用,则会进入函数内部继续单步执行。
  • finish:继续执行当前函数,直到函数返回,并显示返回值。
  • until:不带参数时,执行直到当前函数返回;带参数(如行号或地址)时,程序继续执行直到到达指定位置。

断点操作

  • break <location>b <location>:在指定位置设置断点,位置可以是行号(如b 10在第 10 行设置断点)、函数名(如b mainmain函数入口设置断点)或文件名 + 行号(如b main.c:20main.c的第 20 行设置断点)。
  • tbreak <location>:设置临时断点,该断点在被命中一次后自动删除。
  • info breakpointsinfo b:显示当前设置的所有断点的信息,包括断点编号、位置、是否启用等。
  • delete <breakpoint_number>:删除指定编号的断点,如delete 1删除编号为 1 的断点。
  • disable <breakpoint_number>:禁用指定编号的断点,使其暂时不起作用,但断点信息仍保留。
  • enable <breakpoint_number>:启用之前被禁用的指定编号的断点。

查看与打印

  • listl:显示当前执行位置附近的源代码,默认每次显示 10 行。也可指定行号(如l 50从第 50 行开始显示)或函数名(如l main显示main函数的代码)来显示特定内容。
  • print <expression>p <expression>:打印指定表达式的值,如p x打印变量x的值,p a + b打印a + b的计算结果。
  • display <expression>:每次程序停止时自动显示指定表达式的值,便于监控变量变化,如display i每次程序暂停时都会显示变量i的值。
  • undisplay <display_number>:删除指定编号的自动显示设置,编号可通过info display查看。
  • backtracebt:显当前的函数调用栈信息,帮了解程序的执行路径和各函数间的调用关系。
  • info locals:查看当前作用域内的局部变量及其值。
  • whatis <variable>:显示变量的类型。
  • ptype <variable>:显示变量详细的类型信息,对于结构体、类等复杂类型会展示其成员信息 。

观察点操作

  • watch <expression>:设置观察点,当指定的表达式的值发生变化时,程序暂停执行。
  • rwatch <expression>:设置只读观察点,当程序读取指定表达式的值时,程序暂停执行。
  • awatch <expression>:设置读写观察点,当程序读取或写入指定表达式的值时,程序暂停执行。

其他常用指令

  • set <variable>=<value>:设置变量的值,如set n = 10将变量n的值设置为 10。
  • return:强制从当前函数返回,可带返回值,如return 5使当前函数直接返回 5。
  • shell <command>:在不离开 Gdb 的情况下,执行 Linux shell 命令,如shell ls可列出当前目录下的文件和目录。
  • help <command>:查看指定 Gdb 命令的帮助信息,若不指定具体命令,会显示 Gdb 的总体帮助信息和命令分类。

Linux系统下调试的时候其实是有一种历史机制的,所以它再调试过程中可以进行直接回车接着进行!

 

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

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

相关文章

操作系统-八股

进程基础&#xff1a; 进程定义&#xff1a;运行中的程序&#xff0c;有独立的内存空间和地址&#xff0c;是系统进行资源调度和分配的基本单位。 并发&#xff0c;并行 并发就是单核上面轮询&#xff0c;并行就是同时执行&#xff08;多核&#xff09;&#xff1b; 进程上下…

ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值

note 问题背景&#xff1a;序列推荐&#xff08;SR&#xff09;任务旨在预测用户可能的下一个交互项目。近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在SR系统中表现出色&#xff0c;但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…

71.HarmonyOS NEXT PicturePreviewImage组件深度剖析:从架构设计到核心代码实现

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT PicturePreviewImage组件深度剖析&#xff1a;从架构设计到核心代码实现 (一) 文章目录 HarmonyOS NEXT PicturePreviewImage组件深…

简单实现京东登录页面

Entry Component struct Index {State message: string ;build() { Column(){//顶部区域Row(){Image($r(app.media.jd_cancel)).width(20).height(20)Text(帮助)}.width(100%).justifyContent(FlexAlign.SpaceBetween)//logo图标Image($r(app.media.jd_logo)).width(250).heig…

9.贪心算法

简单贪心 1.P10452 货仓选址 - 洛谷 #include<iostream> #include<algorithm> using namespace std;typedef long long LL; const int N 1e510; LL a[N]; LL n;int main() {cin>>n;for(int i 1;i < n;i)cin>>a[i];sort(a1,a1n);//排序 LL sum 0…

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…

每日一题---单词搜索(深搜)

单词搜索 给出一个二维字符数组和一个单词&#xff0c;判断单词是否在数组中出现&#xff0c; 单词由相邻单元格的字母连接而成&#xff0c;相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。 数据范围&#xff1a; 0 < 行长度 < 100 0 < 列长度 <…

插入排序c++

插入排序的时间复杂度为O&#xff08;N^2&#xff09;&#xff0c;和冒泡排序的时间复杂度相同&#xff0c;但是在某些情况下插入排序会更优。 插入排序的原理是&#xff1a;第1次在0~0范围内排序&#xff0c;第2次在0~1范围内排序&#xff0c;第3次在0~2范围内排序……相当于…

Swagger 从 .NET 9 中删除:有哪些替代方案

微软已经放弃了对 .NET 9 中 Swagger UI 包 Swashbuckle 的支持。他们声称该项目“不再由社区所有者积极维护”并且“问题尚未得到解决”。 这意味着当您使用 .NET 9 模板创建 Web API 时&#xff0c;您将不再拥有 UI 来测试您的 API 端点。 我们将调查是否可以在 .NET 9 中使用…

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…

使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法

使用DeepSeek和墨刀AI&#xff0c;写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整&#xff1f; 还是按以前的思路写PRD&#xff0c;就还是以前的样子。 现在AI这么强大&#xff0c;产品经理如何使用DeepSeek写PRD文档&#xff0c;产品经…

【VUE2】第五期——VueCli创建项目、Vuex多组件共享数据、json-server——模拟服务端api

黑马程序员视频地址&#xff1a;091-vuex的基本认知_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HV4y1a7n4?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p91 目录 1 VueCli 自定义创建项目 2 Eslint代码规范 2.1 规…

rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64

在我在Linux中安装离线CAN工具时&#xff0c;出现了一个问题&#xff0c; rootwanghuo:~# rpm -ivh can-uilts-v2019.00.0-alt1.aarch64.rpm error: Failed dependencies:rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64 意思是尝试安装 can-uilts-v20…

CNN 稠密任务经典结构

FCN UNet FPN FCNUNETFPNpadding无&#xff08;逐渐变小&#xff09; 有&#xff08;左右对称&#xff09;上采样 双线性双线性 最近邻跳跃链接 相加 Cropcat 1x1卷积相加 三个网络差不多&#xff0c;UNet名字最直观&#xff0c;后续流传…

算法刷题整理合集(二)

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…

STM32配套程序接线图

1 工程模板 2 LED闪烁 3LED流水灯 4蜂鸣器 5按键控制LED 6光敏传感器控制蜂鸣器 7OLED显示屏 8对射式红外传感器计次 9旋转编码器计次 10 定时器定时中断 11定时器外部时钟 12PWM驱动LED呼吸灯 13 PWM驱动舵机 14 PWM驱动直流电机 15输入捕获模式测频率 16PWMI模式测频率占空…

Houdini学习笔记

1. Houdini中一次只能显示一个物体 如果要都显示 需要 merge 节点 粉色的是 以参考显示 2.对任意一个节点按F1 可以弹出houdini官方文档 3. 恢复视角 Space H,居中 Space G 居中选中物体

仿Ant Design Vue风格自定义浏览器滚动条样式

仿Ant Design Vue风格自定义浏览器滚动条样式 问题原因 浏览器默认的滚动条样式很丑&#xff0c;无法满足需求&#xff0c;需要自定义滚动条样式&#xff0c;参考ant-design-vue的样式 css修改滚动相关属性可查阅官方文档 选择器介绍 ::webkit-scrollbar&#xff1a;滚动条…

单元测试、系统测试、集成测试、回归测试的步骤、优点、缺点、注意点梳理说明

单元测试、系统测试、集成测试、回归测试的梳理说明 单元测试 步骤&#xff1a; 编写测试用例&#xff0c;覆盖代码的各个分支和边界条件。使用测试框架&#xff08;如JUnit、NUnit&#xff09;执行测试。检查测试结果&#xff0c;确保代码按预期运行。修复发现的缺陷并重新测…

网络安全反渗透 网络安全攻防渗透

网络渗透防范主要从两个方面来进行防范&#xff0c;一方面是从思想意识上进行防范&#xff0c;另一方面就是从技术方面来进行防范。 1.从思想意识上防范渗透 网络攻击与网络安全防御是正反两个方面&#xff0c;纵观容易出现网络安全事故或者事件的公司和个人&#xff0c;在这些…