Linux调试器gdb的用法

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.hqwc.cn/news/292149.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全、高效的MySQL DDL解决方案

MySQL作为目前应用最广泛的开源关系型数据库,是许多网站、应用和商业产品的主要数据存储。在生产环境,线上数据库常常面临着持续的、不断变化的表结构修改(DDL),如增加、更改、删除字段和索引等等。其中一些DDL操作在M…

司铭宇老师《流量密码-全网全渠道营销拓客高手特训营》网络营销培训

《流量密码-全网全渠道营销拓客高手特训营》 在互联网的浪潮中,无论是大型企业还是小型创业公司,都面临着一个共同的问题:如何有效地吸引和留住客户?答案就是全网全渠道营销。这是一种全新的营销模式,它能够帮助企业在…

宕机后,Redis如何实现快速恢复?

Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵。 下面就来具体来看看Redis的故障恢复是如…

vue-pure-admin源码解读与使用

vue-pure-admin 全面使用ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统(兼容移动端),目前斩获11.5k个star。 界面构成 主题Layout的组成 左边sidebar由Vertical组件定义tab标签栏由layoutHeader组件定义中间Body由appMain组件定义 为何点…

RouterSrv-路由功能

2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 安装Remote Access服务开启路由转发,为当前实验环境提供路由功能。启用网络地址转换功能,实现内部客户端访问互联网资源。答题步骤 安装Remote Access服务开启路由转发,为当前实验环境提供路由功能。 配置网卡 加…

VSCode安装PYQT5

安装PYQT5 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple 获得Python环境位置 查看函数库安装位置 pip show 函数库名 通过查询函数库,了解到python安装位置为 C:\User…

数学建模笔记-拟合算法

内容:拟合算法 一.概念: 拟合的结果就是找到一个确定的曲线 二.最小二乘法: 1. 2.最小二乘法的二表示的是平方的那个2 3.求解最小二乘法: 三.评价拟合的好坏 1.总体评分和SST: 2.误差平方和SSE: 3.回…

数据分析基础之《numpy(6)—合并与分割》

了解即可,用panads 一、作用 实现数据的切分和合并,将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […

(1)(1.9) MSP (version 4.2)

文章目录 前言 1 协议概述 2 配置 3 参数说明 前言 ArduPilot 支持 MSP 协议,可通过任何串行端口进行遥测、OSD 和传感器。这样,ArduPilot 就能将遥测数据发送到 MSP 兼容设备(如大疆护目镜),用于屏幕显示&#x…

springboot学习笔记(二)

1.Spring 和SpringBoot区别 2.Web开发入门 3.MVC模型 4.RequestMapping用法 5.RESTful 1.Spring 和SpringBoot区别 参考: 大家都懂Spring和SpringBoot的区别吗? - 知乎 https://www.zhihu.com/question/598494506/answer/3018702101 在学习了Spri…

[toolschain] 头文件有下划线报错不好看,ubuntu下vscode如何设置包含目录路径,以及如何找到安装包的头文件

写在前面 本文是把之前的散落在不同blog中的记录,总结单独合成了一篇文章 vscode 如何配置文件路径 之前使用visual studio 感觉在这一点上 更方便,如果vscode 要配置一下 。 新建:c_cpp_properties.json 或者 ctrl shift p在设置中查找 c…

绝地求生:【违规处罚工作公示】12月11日-12月17日

12月11日至12月17日期间,共计对93,919个违规账号进行了封禁,其中83,785个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为,建议您优先在游戏内进行举报; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举…