Linux调试器gdb的用法

news2024/11/24 17:40:05

Linux调试器gdb的用法

  • 1. debug/release版本之间的比较
  • 2. gdb调试器的基本指令
  • 3. 使用展示

1. debug/release版本之间的比较

在之前学习C语言的的时候出过一期vs的调试技巧。
而对于现在的Linux下的调试器gdb其实也是换汤不换药的,基本上的调试思路是不会改变的,改变的只是工具使用上。

  • Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。(可调试)
  • Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,以便用户很好地使用。(不可调试)。所以debug版本下是要存放一些调试信息的,侧面说了,debug版本下生成的可执行文件的体积是会更大的。
  • 这里要注意的是,我们Linux默认执行的是release版本的,如果要使其执行的是debug版本的话要加上选项-g

gcc -o 生成可执行文件 原文加 -g

在这里插入图片描述

  • 这里建议写在makefile文件中,直接make即可。
  • 如果还没有下载gdb调试工具的话执行以下指令:

sudo yum install -y gdb

2. gdb调试器的基本指令

指令功能
list或 l 行号展示所对应的行号的代码
b + 行号 / b + 函数名/ b 文件名称:行号给指定行号断点,对一个vs的快捷键F9
(delete breakpoints) d + 编号删除指定行号断点
info b 或 info break查看断点信息
run 或 r运行代码,对应vs的快捷键F5
disable + 断点编号禁用断点
enable + 断点编号开启断点
next或n逐过程调试代码,对应vs的快捷键F10
step或s逐语句调试代码,对应vs的快捷键F11
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
p + 变量查看变量内容
display + 变量长显示变量内容,跟踪查看一个变量,每次停下来都显示它的值
undisplay + 编号删除长显示
continue或c从一个断点运行到下一个断点
breaktrace或bt调用堆栈。查看各级函数调用及参数
finish将一个函数运行结束后停止。执行到当前函数返回,然后挺下来等待命令
until + 行号在一定范围内,直到运行到指定行号运行停止
set var name=value修改变量name的内容为value
quit退出gdb

3. 使用展示

gdb 可执行文件
进入调试模式

在这里插入图片描述

  1. l 行号
    显示源代码,每次展示10行代码,但是gdb默认会记住上一次使用的指令,所以只需要一直按回车就可以直接执行并展示所有的代码。
    在这里插入图片描述
  2. (b 行号/b 函数名/b 文件名:行号)以及(info b)
    打断点相当于我们使用vs时的快捷键F9.
    1. b 行号打断点
    2. b 函数名打断点
    3. b 文件名:行号打断点
  • info b查看断点信息
    查看断点信息的时候,引入了断点编号的概念。也就是说gdb识别断点的方式并不是使用行号识别的,而是使用编号识别的,我们每设置一个断点信息,编号都会自增,只有当我们退出gdb调试后再次进入编号才会被刷新。
    而这个编号在我们删除编号,使能断点的时候都要用到。
    在这里插入图片描述
  1. d 断点编号
    d 断点编号 是删除断点信息的。断点编号需要用info b查看断点信息查看。
    在这里插入图片描述

  2. run或r运行代码
    如果有断点,则会运行到断点处停止运行。
    在这里插入图片描述

  3. disable/enable打开/关闭断点
    有的时候我们设置了断点,但是为了测试另一部分代码,可能要删除当前的断点,但是当前的断点可能下次也是需要用到的,于是就可以将断点暂时关闭使用disable,要用到的时候打开断点enable
    在这里插入图片描述
    在这里插入图片描述

  4. next或n逐过程编译/step或s逐语句编译
    n逐过程编译相当于vs的快捷键F10,进行逐条语句编译。
    s逐语句编译相当于vs的快捷键F11,进行逐过程编译。
    在这里插入图片描述

  5. p 变量名——查看变量内容
    用于显示变量的内容,但是缺点是只能显示一次,如果还想再看,只能重新输入指令。
    在这里插入图片描述

  6. display 变量/undispaly 变量
    display——可以长时间显示变量的值,可以进行时事更新变量的值
    undisplay——删除长显示变量
    在这里插入图片描述

  7. continue或n
    跳转断点。运行两个端点之间的代码,会从一个断点运行到另一个断点后停止。
    在这里插入图片描述

  8. bt
    调用堆栈。
    在这里插入图片描述

  9. finish
    finish——将一个函数运行完后停止。
    有时候我们debug代码的时候,确定了就是在这几个函数中的其中一个函数出错了,这个时候我们就要对函数一一排查,把每一个函数到debug以下。
    在这里插入图片描述

  10. until 行号
    until在一个范围内指定运行到指定的行号。
    在这里插入图片描述

  11. set var name=value
    我们都知道,一个已经运行起来的代码中的变量不能不能别修改了。但是gdb中可以在调试的时候修改这个变量的值。
    在这里插入图片描述
    我在函数部分加上了一个判断结构,正常情况下都是会执行printf(sum)这个函数的。
    在这里插入图片描述
    但是我们可以让它输出haha
    在这里插入图片描述
    这个功能用于我们debug的时候,用来判断语句,但是不知道是哪一部份出错了,就要手动去修改值,让调试的时候进入指定的判断里面去debug,但是有了这个指令就不需要了。
    注:这个修改不是本质上的修改,只是名义上的修改,一旦退出被修改的值会恢复原来的值。

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

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

相关文章

Electron Vite打包后,部分图标未显示的解决方案

背景 这个问题,弄了一晚上,头都大了,找了一堆博客也没解决。主要参考这个:https://blog.csdn.net/m0_73845616/article/details/129741099。 下面讲一下我的解决方案。 解决方案 上面链接里的方法,我采用第二、三个都…

鸿蒙-arkTs:访问控制授权申请

module.json5文件中 requestPermissions 进行配置(值为数组,可配置多个) ohos.permission.INTERNET {"name": "ohos.permission.INTERNET" }

鸿蒙-HarmonyOS之初见

鸿蒙初识,此事能成!! 自己安装工具、配置环境并运行成功,流程记录。 一、首先官网下载开发工具 官网地址:https://developer.huawei.com/consumer/cn/ 当前最新的版本3.1 ,windows和Mac,Mac又…

GD32移植STM32工程(因为懒,所以移植)

文章目录 一、前言二、差异性三、软件移植部分1.前期准备1.1 安装GD32固件库1.2 选择所用芯片 2.修改程序2.1 启动时间(内部时钟可不改)2.2 主频2.2.1 系统时钟配置2.2.2 108MHz宏定义第一处第二处第三处第四处第五处 2.2.3 串口2.2.4 FLASH 四、总结 一…

c语言错误总结

函数 A:void类型函数可以 B:不需要,如果return 不返回任何值,函数会在return语句执行后终止执行,后面的语句不会执行 C:对的 D:不可能,return只能返回一个数据 A:函数不一定有返回值 B:可以…

php伪协议 [NISACTF 2022]easyssrf

打开题目 我们直接用 file:/// 协议读取看看flag文件 file:///flag 点击curl得到回响 得到提示告诉我们应该看看提示文件 file:///fl4g 跟着去访问了一下 再跟着去访问 从代码中我们可以看出 get传参file,我们用stristr检测file参数里面是否含有file&#xff…

企业需要哪些数字化管理系统?

企业需要哪些数字化管理系统? ✅企业引进管理系统肯定是为了帮助整合和管理大量的数据,从而优化业务流程,提高工作效率和生产力。 ❌但是,如果各个系统之间不互通、无法互相关联数据的话,反而会增加工作量和时间成本…

Qt之QWidget 自定义倒计时器

简述 Qt提供的带进度显示的只有一个QProgresBar,这个控件要么是加载进度从0~100%,要么是持续的两边滚动;而我想要是倒计时的效果,所以QProgresBar并不满足要求,而Qt重写控件相对于MFC来说简直是轻而易举,所以就整了两种不同的倒计时控件; 效果 代码 QPushButton的绘制部…

边缘计算有哪些常用场景?TSINGSEE边缘AI视频分析技术行业解决方案

随着ChatGPT生成式人工智能的爆发,AI技术在业界又掀起一波新浪潮。值得关注的是,边缘AI智能也在AI人工智能技术进步的基础上得到了快速发展。IDC跟踪报告数据显示,2021年我国的边缘计算服务器整体市场规模达到33.1亿美元,预计2020…

2023最新版JavaSE教程——第11天:常用类和基础API

目录 一、字符串相关类之不可变字符序列:String1.1 String的特性1.2 String的内存结构1.2.1 概述1.2.2 练习类型1:拼接1.2.3 练习类型2:new1.2.4 练习类型3:intern() 1.3 String的常用API-11.3.1 构造器1.3.2 String与其他结构间的…

Spring统一数据返回格式处理String类型出错解析

Spring 统一数据返回格式是使用 Spring 进行开发时很常用的一个功能,但是当其处理返回类型原先为 String 类型的时候就会出错报错,需要我们额外对 String 类型进行处理。 例如:现在我开发一个项目,项目中我想要统一返回下述的 Res…

作业--day35

练习数据库命令 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资; 2> 添加三条工人信息(可以完整信息,也可以非完整信息); 3> 修改某一个工人的薪资(…

深度学习14—注意力机制与自注意力机制

注:以下均为个人学习笔记,发布只为方便学习阅读,若觉侵权,请联系删除!! 1.李沐老师课堂学习理解笔记 1.1 随意线索和不随意线索 1.2 注意力机制 通过注意力池化层来有偏向性的选择某些输入。 1.3 注意力…

【QT】C++/Qt使用Qt自带工具windeployqt打包

基本操作 运行项目debug或者release 将运行后的可执行文件单独放到一个文件夹中 根据项目使用的kits来选择Qt的打包工具 打开工具后移动到exe文件夹下执行windeployqt xxx.exe 预览图 问题 打包后再其他电脑上运行出现下图错误 将自己电脑的这个文件拷到可执行文件夹中既…

构建高效持久层:深度解析 MyBatis-Plus(02)

目录 引言1. 逻辑删除1.1 概述1.2 逻辑删除的优势1.3.为什么使用逻辑删除1.4 综合案例 2. 乐观锁和悲观锁2.1.什么是乐观锁和悲观锁2.2.乐观锁和悲观锁的区别2.3.综合案例 3. 分页插件总结 引言 在现代软件开发中,数据库操作是不可或缺的一环。为了提高系统的性能、…

网络通信day5作业

1> 使用select完成TCP客户端程序 客户端: #include<myhead.h>#define FPORT 9999 #define FIP "192.168.125.130"#define KPORT 6666 #define KIP "192.168.125.130"int main(int argc, const char *argv[]) {//创建套接字文件描述符int cfd…

关于EasyExcel 合并单元格方法该如何实现

在做一个业务的导出&#xff0c;目前遇到一个需求&#xff0c;如下图&#xff1a; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.metad…

美好蕴育润康真的对孕妇好吗?有效吗?

在孕期&#xff0c;孕妇的营养摄入对于胎儿的健康发育至关重要。因此&#xff0c;选择一款合适的孕期营养补充品成为了许多孕妇关注的焦点。美好蕴育润康作为一款备受推崇的孕期营养补充品&#xff0c;究竟是否真的对孕妇有益&#xff0c;是否有效呢&#xff1f; 首先&#xff…

数据治理与大模型一体化实践

引言: 大模型落地到当前这个阶段&#xff0c;核心关注点还是领域大模型&#xff0c;而领域大模型落地的前提在于两点&#xff1a;需求端&#xff0c;对当前应用的降本增效以及新应用的探索&#xff1b;供给端&#xff0c;训练技术已经有较高的成熟度。 专家介绍&#xff1a; …

【C语言】指针详解(一)

目录 1.内存和地址 1.1内存 1.2如何理解编址 2.指针变量和地址 2.1取地址操作符&#xff08;&&#xff09; 2.2指针变量和解引用操作符&#xff08;*&#xff09; 2.2.1指针变量 2.2.2拆解指针类型 2.2.3解引用操作符 2.3指针变量大小 1.内存和地址 1.1内存 在讲内…