【Linux篇】gdb的使用

news2024/10/24 19:22:22

💛不要有太大压力🧡
💛生活不是选择而是热爱🧡

在这里插入图片描述

💚文章目录💚

    • 1. 背景知识
    • 2. 使用


1. 背景知识

image-20221004161118331

1. 程序发布的方式有两种,debug模式和release模式

2. Linux下,gcc和g++编译生成的可执行程序默认是release模式

3. 要使用gdb调试,必须在debug模式下进行调试,要加上-g选项

image-20221004162046120

如果写makefile的时候 不加-g选项的话,就无法调试。(没有找到调试信息)

如果用-g选项生成了可执行文件,我们如何查看调试信息呢?

$ readelf -S mytest | grep -i debug

image-20221004163254589

image-20221004163013963

可以查看到调试信息

2. 使用

gdb mytest:进入开始调试

  1. list或l:显示mytest的源代码,后面直接回车即可(因为gdb会记住最近的一条命令,如果命令无变化,可以直接回车),每次显示十行。(默认可能不是从最开始打印)

    image-20221004164802603

  2. list或 l 0:从第一行开始显示

    image-20221004164833880

  3. list/l 函数名:列出某个函数的源代码

  4. run / r:开始调试,如果没有设置断点,就直接运行结束

    image-20221004170101809

  5. break / b 行号:给某一行打断点

    image-20221004183505585

  6. info b:查看断点

    image-20221004183538714

  7. delete / d 断点序号:删除断点

    删除断点要结合 info b来看,因为打断点的时候会自动生成断点的序号

    image-20221004183838054

    单独一个d会删除所有断点

  8. next / n:单条执行.(逐过程)

    image-20221004184833478

  9. print / p 变量:打印变量的值

    image-20221004185032786

  10. step / s:步入.(逐语句,会进入函数)

    image-20221004185605887

  11. bt:查看调用堆栈

    image-20221004185801629

  12. finish:直接运行完当前函数

    如果此时进入了一个函数,但是不想继续一步一步走了,想直接运行完这个函数,就用finish

    注意:finish只能结束main函数之外的函数

    image-20221004190146341

  13. display:长显示

    在循环中,我们时常要查看循环变量的值是多少,可以用长显示让循环变量一直显示着

    image-20221004191004344

  14. undisplay 长显示变量的编号:取消变量的长显示

    给变量长显示之后,会对应前面有一个编号

    image-20221004191325173

  15. until X行号:跳至X行

    注意:until是函数内跳转,不会调到函数外部,如果该函数在main函数中的位置是第18行,那么你输入的行数超过18行,他还是会停在18行

    image-20221004191810525

  1. continue / c :跳到下一个断点

    image-20221004193234028

    image-20221004193335281

    并且跳到下一个断点的时候,两个断点中间的代码是被执行了的

  2. disable 断点编号:禁用断点

    image-20221004195157283

  3. enable 断点编号:启用断点

    image-20221004195226499

  4. set var 变量名 = 值:设置变量的值

    image-20221004195637328

  5. 打印自定义类型 或者 数组

    p就可以做到

    image-20221004200357383

    image-20221004200422449

    可以看到,p命令直接就把自定义类型或者数组中的元素全显示出来了

✨感谢阅读~ ✨
❤️码字不易,给个赞吧~❤️

在这里插入图片描述

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

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

相关文章

AI新工具 MacOS 翻译提供翻译、润色和语法修改功能的插件;AI生成 Excel公式;Deepmind前华人员工创建视频生成工具

1: OpenAI Translator Bob Plugin macOS 平台的翻译提供翻译、润色和语法修改功能的插件 OpenAI Translator Bob Plugin是一款基于OpenAI的API,为用户提供翻译、润色和语法修改功能的插件。这款插件专门为macOS平台上的Bob软件设计,通过使用先进的Chat…

3.6 day1 FreeRTOS

1.总结keil5下载代码和编译代码需要注意的事项 注意要将魔术棒的的debug选项中的setting中的flashdownload中的reset and run 勾选上,同时将pack中的enable取消勾选 2.总结STM32Cubemx的使用方法和需要注意的事项 可以通过功能列表对引脚进行设置,并且可…

FreeRTOS day2

1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_value HAL_ADC_GetValue(&hadc);TIM3->CCR3 adc_value * 999 / 4095;printf("%d %d\r\n",adc_value,TIM3->C…

URL输入到页面渲染过程详解

当我们在浏览器中输入一个URL并按下回车键时,浏览器会执行一系列步骤来解析URL、发送请求、接收响应,并最终渲染页面。这个过程涉及到多个阶段,包括DNS解析、TCP握手、发送HTTP请求、服务器处理请求、返回HTTP响应、浏览器解析和渲染等。下面…

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

14. C++继承与虚函数

【继承基础概念】 继承可以让本类使用另一个类的非私有成员,提供共用成员的类称为父类或基类,使用共用成员的类称为子类或派生类,子类创建对象时会包含继承自父类的成员。 继承的优势是减少重复定义数据,当本类需要在另一个类的…

变量提升,函数提升

一、变量提升 只有var存在变量提升。变量提升就是将变量提至当前作用域的最前面,只提升声明,不提升赋值。 console.log(n) // undefined,不会报错 var n 10 等价于 var n console.log(n) // undefined,不会报错 n 10 因为n是…

【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

算法题 — 三个数的最大乘机

三个数的最大乘机 整型数组 nums,在数组中找出由三个数字组成的最大乘机,并输出这个乘积。(乘积不会越界) 重点考察:线性扫描 排序法: public static void main(String[] args) {System.out.println(so…

海外IP代理应用:亚马逊使用什么代理IP?

代理IP作为网络活动的有力工具,同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台,吸引了大量的跨境电商玩家入驻,想要做好亚马逊,养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢?如何使用&#xf…

Jmeter高效组织接口自动化用例

1、善用“逻辑控制器”中的“简单控制器”。可以把简单控制器像文件夹一样使用,通过它来对用例进行分类归档,方便后续用例的调试和执行。 2、同编写测试用例一样,这里的接口测试用例应该进行唯一性编号,这样在运行整个用例计划出现…

《TCP/IP详解 卷一》第15章 TCP数据流与窗口管理

目录 15.1 引言 15.2 交互式通信 15.3 延时确认 15.4 Nagle 算法 15.4.1 延时ACK与Nagle算法结合 15.4.2 禁用Nagle算法 15.5 流量控制与窗口管理 15.5.1 滑动窗口 15.5.2 零窗口与TCP持续计时器 15.5.3 糊涂窗口综合征 15.5.4 大容量缓存与自动调优 15.6 紧急机制…

汽车小车车灯无痕修复用的胶是什么胶?

汽车小车车灯无痕修复用的胶是什么胶? 可以使用在小车车灯无痕修复中的胶水,通常使用的车灯无痕修复专用UV胶。 车灯无痕修复专用胶主要成份是改性丙烯酸UV树脂,主要应用在车灯的专业无痕修复领域。它可以用于修复车灯壳的裂缝或破损&#xf…

阿珊解析Vuex:实现状态管理的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何将字体添加到 ONLYOFFICE 桌面编辑器8.0

作者:VincentYoung 为你写好的文字挑选一款好看的字体然而自带的字体列表却找不到你喜欢的怎么办?这只需要自己手动安装一款字体即可。这里教你在不同的桌面操作系统里的多种字体安装方法。 ONLYOFFICE 桌面编辑器 ONLYOFFICE 桌面编辑器是一款免费的办…

第一讲 计算机组成与结构(初稿)

计算机组成与结构 计算机指令常见CPU寄存器类型有哪些?存储器分类?内存?存储器基本组成: 控制器的基本组成主机完成指令的过程以取数指令为例以存数指令为例ax^2bxc程序的运行过程 机器字长存储容量小试牛刀(答案及解析…

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折

同志们,云服务器行业大内圈,腾讯云各个活动都已开始卷中卷,我整理一下各个活动,加油冲了 【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折,最低只要51 【腾讯云】多款热门AI产品新春巨惠&…

计网《一》|互联网结构发展史|标准化工作|互联网组成|性能指标|计算机网络体系结构

计网《一》| 概述 计算机网络在信息时代的作用什么是互联网呢?互联网有什么用呢?为什么互联网能为用户提供许多服务 互联网基础结构发展的三个阶段第一个阶段:第二阶段:第三个阶段: 互联网标准化的工作互联网的组成边缘…

CCF-B推荐会议 Euro-Par‘24延期10天! 3月25日截稿!抓住机会!

会议之眼 快讯 第30届Euro-Par(International European Conference on Parallel and Distributed Computing)即国际欧洲并行和分布式计算会议将于 2024 年 8月26日-30日在西班牙马德里举行!Euro-Par是欧洲最主要的会议之一,提供了一个广泛而综合的平台&a…

数字孪生10个技术栈:数据处理的六步骤,以获得可靠数据。

一、什么是数据处理 在数字孪生中,数据处理是指对采集到的实时或历史数据进行整理、清洗、分析和转化的过程。数据处理是数字孪生的基础,它将原始数据转化为有意义的信息,用于模型构建、仿真和决策支持。 数据处理是为了提高数据质量、整合数…