Linux课程五课---Linux调试器-gdb使用

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


gdb的使用

  • **作者前言**
  • 简单使用准备工作
    • gdb的使用

简单使用准备工作

我们先创建一个简单的.c文件或者 .cpp文件
在这里插入图片描述
makefile文件
在这里插入图片描述
我们知道发布软件一般有两种方式:

  1. debug (可以调试)
  2. release(不可以调试)
    如果我们直接使用上面的makefile里面的代码运行出来的可执行,使用gdb来调试就会找不到的
    ,因为我们知道,debug生成的可执行文件带有调试信息,而.release生成的可执行程序去掉调试信息
    在Linux中生成的可执行程序默认是release版本的,如果我们要生成debug版本的就要在生成可执行的文件的指令加个-g
    在这里插入图片描述
g++ test.cpp -o test.out -g

debug版本下的可执行文件是比release版本的大的,
在VS2019中,我们如果要调试是要在debug下才可以
在这里插入图片描述
所以我们是要gdb调试器的时候,可执行程序也必须是debug版本的

gdb的使用

安装gdb

sudo yum install gdb -y

开始调试可执行程序

gdb test.out

然后在gdb下的相关命令

  1. 显示该行号周围的10行代码,每次只显示出10行
list + 数字 或者 l+数字  # 显示行号后的代码
list +函数名 或者 l + 函数名 # 显示函数结构体

在这里插入图片描述
如果是多个文件整合成的可执行文件,如果想查看某个文件的内容。可以

l 文件名:行号

在这里插入图片描述

我们可以继续按回车或按l 然后回车,会继续显示下去,每次10行代码
2. gdb的F5

r或者run

在这里插入图片描述
3. 断点

添加断点

b+行号  # 在该行打断点

查看断点

info b

在这里插入图片描述
取消断点

d+序号

这个序号就是info b 查看断点后显示出来的Num下的序号,如上图
在这里插入图片描述
禁用断点
在这里插入图片描述

disable + 序号

启用断点

enable +序号

逐过程
在这里插入图片描述
在vs调试中F10就是逐过程,如果在linux中的gdb的逐过程就是n指令

n或者 next

后面可以一直按回车键,进行逐过程
逐语句
在vs的调试中F11就是逐语句的快捷键,在如果在linux中的gdb的逐语句就是s指令

s或者step

后面可以一直按回车键,进行逐语句了

显示变量值和地址

p 变量或者&变量

在这里插入图片描述
如果是要常显示可以使用这个命令

display 变量名

在这里插入图片描述
会一直显示到程序结束,
如果想取消常显示,直接取消变量名是不行的,要取消序号号才行
在这里插入图片描述

undisplay 序号

在这里插入图片描述
这个命令就是取消常显示了

该断点运行到下一个断点

c或者comtinue

查看当前处于哪个函数里面也可以理解为压栈

breaktrace(或bt)

在这里插入图片描述
把自定义函数运行结束,这个必须再运行到函数体内才能执行的

finish

在这里插入图片描述
从该行运行到x行

until

在这里插入图片描述
如果是死循环,就会一直运行下去,直到运行到x行
更改变量值
如果我们运行过程中要更改一些变量的值可以使用这个命令

set var 变量名=值

0
总结
gdb的总结到这里就结束了.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django日志(一)

一、概念与配置 1.1、概述 日志是程序员经常在代码中使用快速和方便的调试工具。它在调试方面比print更加的优雅和灵活 而且日志记录对于调试很有用,可以提供更多,更好的结构化,有关应用程序的状态和运行状况的信息 Django框架的日志通过python内置的logging模块实现的,可…

【JavaScript 漫游】【040】Blob 对象

文章简介 本篇文章为【JavaScript 漫游】专栏的第 040 篇文章,对浏览器模型中的 Blob 对象进行了总结。 概述 Blob 对象表示一个二进制文件的数据内容,比如一个图片文件的内容就可以通过 Blob 对象读写。它通常用来读写文件,它的名字是 Bi…

BS4提取chrome.webdriver方法和属性以及描述并输出到Excel

BS4网络提取selenium.chrome.WebDriver类的方法及属性 chrome.webdriver: selenium.webdriver.chrome.webdriver — Selenium 4.18.1 documentation class selenium.webdriver.chrome.webdriver.WebDriver 是 Selenium 中用于操作 Chrome 浏览器的 WebDriver 类。WebDriver 类…

数据可视化-ECharts Html项目实战(4)

在之前的文章中,我们学习了如何创建圆环图、嵌套圆环图、蓝丁格尔玫瑰图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Htm…

鸿蒙一次开发,多端部署(二)从一个例子开始

本章通过一个天气应用,介绍一多应用的整体开发过程,包括UX设计、工程管理及调试、页面开发等。 UX设计 本示例中的天气应用包含主页、管理城市和添加城市三个页面,其中主页中又包含菜单和更新间隔两个弹窗,基本业务逻辑如下所示…

2024.3.21学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p246-p251 this关键词 java虚拟机会给每个对象分配this, 代表当前对象 this内存机制 this关键字可以用来访问类的属性、方法、构造器 this用以区分当前类的属性和局部变量 访问成员方法的语法…

《云计算:数字时代的引擎》

在数字化时代,云计算技术以其强大的计算能力和灵活的应用方式,成为推动各行各业发展的引擎。本文将围绕云计算的技术进展、技术原理、行业应用案例、面临的挑战与机遇以及未来趋势进行详细探讨。 云计算的技术进展 云计算的技术进展涵盖了多个方面&…

Redis入门到入坑(二)

Redis入门到入坑(二) Redis 数据持久化简介Rdb方式持久化Aof方式数据持久化 Redis事务处理Redis事务简介Redis事务控制实践 Redis架构设计Redis主从复制Redis哨兵模式Redis集群高可用 Redis在SpringBoot工程中的综合应用业务描述准备工作业务逻辑代码设计…

[ C++ ] STL---list的模拟实现

目录 结点类的模拟实现 迭代器类的模拟实现 构造函数 前置与后置 前置- -与后置 - - 与 !运算符重载 * 运算符重载 -> 运算符重载 普通迭代器总体实现代码 list类的实现 list类的成员变量 构造函数 迭代器 insert() erase() push_front/push_back…

C#探索之路基础篇(2):接口Interface的概念、实现、应用范围

文章目录 1 概念2 示例代码:2.1 简单接口的实现2.2 简单的使用接口2.3 使用接口呈现多态性2.4 通过接口实现一个数组迭代器2.5 通过接口来实现松耦合的关系2.6 使用接口实现可扩展、便利性 3 使用范围与时机4 注意事项 不知道大家在学习的过程中,有没有反…

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新,让我们感叹从没有像今天这样,离人工智能的未来如此之近。 追逐AI原生?企业组织基于并利用大模型技术探索和开发AI应用的无限可能,迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…

机器学习——决策树(四)后剪枝

观前提示:这是本人决策树相关的第四篇博文,前3篇的内容如下: 1、建造训练集的决策树【完成结点类编写和建树过程】 2、用验证集评估模型、选出泛化较好的数据划分方式训练模型 3、预剪枝 读者可根据需要从上方《机器学习》专栏中查阅对应…

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT 文章目录 【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPTAbstractI. INTRODUCTIONII. RELATED WORK1. LLMs for Robotics2. Robot Learning III. METHODOLOGY1. ChatGPT Prompts for Robot …

基于Python3的数据结构与算法 - 16 链表

目录 链表 1. 创建链表 2. 链表的插入和删除 3. 双链表 4. 链表总结 链表 链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点得指针next。通过节点之间的相互连接,最终串联成一个链表。 class Node:def __init…

数据结构——循环队列的实现

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

Python 小而精Web开发框架Flask精通指南

文章目录 Flask 简介说明Flask 核心依赖Flask 常用扩展Flask 快速启动工作流程代码示例Flask 快速启动控制台Flask 快速启动效果 Flask 启动参数Flask 路由定义Flask 支持的 HTTP 请求方式:路由装饰器中的参数 Flask 路由参数Flask 路由蓝图路由蓝图的优点路由蓝图的…

痛失offer的八股

java面试八股 mysql篇: 事物的性质: 事物的性质有acid四特性。 a:automic,原子性,要么全部成功,要么全部失败,mysql的undolog,事物在执行的时候,mysql会进行一个快照读…

获取KEGG通路的基因列表 做单细胞GSEA、GSVA分析

使用KEGG通路的基因列表进行单细胞GSEA GSVA分析的过程,我们需要遵循以下步骤: 获取KEGG通路的基因列表:这通常涉及使用专门的R包,如KEGGREST或biomaRt,来查询KEGG数据库并检索特定通路的基因列表。 准备单细胞表达数…

详解JS原型与原型链的关系

1、构造函数原型prototype (1)、构造函数通过原型分配的函数是所有对象所共享的; (2)、JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象; (3)、注意这个prototype就是一个对象,这个对象的所有属性…

Scikit-Learn逻辑回归(二)

Scikit-Learn逻辑回归二:多项式与正则化 1、多项式回归回顾1.1、逻辑回归为什么要使用多项式1.2、多项式回归及原理 2、逻辑回归与多项式 1、多项式回归回顾 本文接上篇:Scikit-Learn逻辑回归(一) 上篇中,我们详细介绍了逻辑回归的概念、原理…