【Linux】环境基础开发工具的使用之gdb详解(三)

前言:上一篇文章中我们讲解了Linux下的gcc与g++的使用,今天我们将进一步的学习gdbmakefile来帮我们更好的理解与使用基础开发工具。

💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:Linux的深度刨析 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
在这里插入图片描述


目录标题

  • Linux下基础开发工具
    • gdb调试方法
      • 1.启动gdb
      • 2.查看源代码
      • 3.运行程序
      • 4.设置断点
      • 5.查看断点信息
      • 6.执行下一行代码。
      • 7.查看变量
      • 8.退出gdb


Linux下基础开发工具

gdb调试方法

程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
GDB是一个用于调试程序的强大工具,可以运行在Linux操作系统下。在Linux中,你可以通过以下步骤来安装和使用GDB:

  1. 打开终端。
  2. 输入以下命令以安装GDB:sudo apt-get install gdb(请注意,这需要管理员权限)。
  3. 安装完成后,你可以通过输入gdb命令来启动GDB调试器。
  4. 接下来,你需要指定要调试的可执行文件。例如,如果你要调试一个名为program的程序,可以使用命令gdb program
  5. GDB将会启动并等待你输入调试命令。你可以使用命令run来运行程序,然后使用其他命令来设置断点、查看变量的值等等。

以下是一些常用的GDB命令:

  • listl:查看源代码

  • breakb:设置断点。

  • info breakpoints :显示断点信息

  • runr:运行程序。

  • continuec:继续执行程序。

  • nextn:执行下一行代码。

  • steps:单步执行程序,进入函数调用。

  • printp:打印变量的值。

  • backtracebt:显示函数调用的堆栈跟踪。

  • quitq:退出GDB调试器。

  • display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display n

  • watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch n(查看变量n)

  • whatis :查询变量或函数

  • info function: 查询函数

  • 扩展info locals: 显示当前堆栈页的所有变量

这只是GDB的一些基本用法,GDB提供了很多功能,你可以通过查阅GDB的文档来了解更多详细的使用方法。


1.启动gdb

对于任何一个文件,必须在源代码生成二进制程序的时候, 加上 -g 选项
实例演示
对文件test.c的文件进行调试,调试的文件命名为test:gcc -g test.c -o test
启动gdb,命令如下:(两种方式)

gdb test //启动调试名称为test的文件,但是会显示版本信息
gdb -q test //表示不打印gdb版本信息,界面较为干净;

运行图:
在这里插入图片描述
无版本信息指令:
在这里插入图片描述

2.查看源代码

listl:查看源代码
实例演示:
在这里插入图片描述


3.运行程序

runr:运行程序。
实例演示:
在这里插入图片描述


4.设置断点

breakb:设置断点, b 行号
删除断点:delete break_num
实例演示:
在这里插入图片描述

5.查看断点信息

info breakpoints :显示断点信息
实例演示:
在这里插入图片描述


6.执行下一行代码。

nextn:执行下一行代码。
steps:单步执行程序,进入函数调用。
重复上一条命令:按下回车 。即每一次重复执行上一条指令时,不需要重复输入,只需回车即可。
附:报错”The program is not being run.”
程序没有自动开始运行,此时输入 start 即可开始调试,注意不要使用 run 命令
实例演示:
在这里插入图片描述


7.查看变量

printp:打印变量的值。
实例演示:

在这里插入图片描述


8.退出gdb

quitq:退出GDB调试器。
在这里插入图片描述
这只是GDB的一些基本用法,GDB提供了很多功能,你可以通过查阅GDB的文档来了解更多详细的使用方法。


好啦,今天的内容就到这里啦,下期内容预告make/makefile、进度条的讲解


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。


🌏🗺️ 这里祝各位寒假愉快 💞💞

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

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

相关文章

从零开始手写mmo游戏从框架到爆炸(六)— 消息处理工厂

就好像门牌号一样,我们需要把消息路由到对应的楼栋和楼层,总不能像菜鸟一样让大家都来自己找数据吧。 首先这里我们参考了rabbitmq中的topic与tag模型,topic对应类,tag对应方法。 新增一个模块,专门记录路由eternity-…

【类与对象(中)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 引用 常引用 5.赋值运算符重载 5.1…

C语言之找单身狗

个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 题目: 在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。…

【zip密码】解除ZIP压缩文件的密码保护的4种方法

Zip压缩包加密大家都很熟悉了,那么zip压缩包取消密码,大家了解多少呢?有密码的情况下,有哪些方法可以取消密码?无密码又该如何取消密码?今天将方法总结分享给大家。 最原始的方法,就是通过解压…

使用GDI画图片生成合成图片并调用打印机进行图片打印

使用GDI画图片生成合成图片并调用打印机进行图片打印 新建窗体应用程序PrinterDemo,将默认的Form1重命名为FormPrinter,添加对 Newtonsoft.Json.dll用于读写Json字符串 zxing.dll,zxing.presentation.dll用于生成条形码,二维码…

DHCP配置

拓扑图 接口地址池 PC5通过接口地址池获取地址,DHCP服务器和VLAN40的网关为SW4 10.0.40.254 SW4 # sysname Huawei # vlan batch 10 20 30 40 # dhcp enable # interface Vlanif40ip address 10.0.40.254 255.255.255.128dhcp select interface # interface Giga…

frp新版toml配置

从frp v0.52.0 版本开始,frp 将TOML作为配置文件格式。INI 格式已被弃用,并将在未来的发布中移除。因此,frp v0.52.0 及更高版本的配置文件默认为TOML格式。 项目地址 GitHub:https://github.com/fatedier/frp/releases 服务端…

做跨境电商为什么需要使用住宅代理IP?

住宅代理IP是近年来跨境电商领域日益受到重视的技术工具,不仅可以保护隐私、优化网络速度,还能助推跨境电商的精细化管理。接下来,我们将深入探讨利用住宅代理IP如何为跨境电商业务带来竞争优势。 一、住宅代理IP与跨境电商 住宅代理IP&…

「深度学习」门控循环单元GRU

一、梯度消失问题 梯度消失&#xff1a; 基础的 RNN 模型不善于处理长期依赖关系&#xff0c;有很多局部影响&#xff0c;很难调整自己前面的计算。y^{<i>} 仅仅受自己附近的值影响。 解决方法&#xff1a;GRU 或 LSTM 梯度爆炸&#xff1a; 反向传播时&#xff0c;随着…

【数据分享】1929-2023年全球站点的逐日降水量数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…

JavaScript中闭包的定义、原理及应用场景

JavaScript是一门以函数为核心的编程语言&#xff0c;其独特的闭包特性是众多开发者所喜爱的特点之一。闭包是一种非常强大的概念&#xff0c;可以帮助我们实现许多复杂的功能和逻辑。本篇博客将为大家深入介绍JavaScript中闭包的定义、原理及应用场景&#xff0c;并通过示例代…

SpringCloud--Gateway解析

一、Gateway简介 Gateway是Spring Cloud官方推出的第二代微服务网关&#xff0c;它旨在提供统一的路由方式以及为微服务应用提供强大的负载均衡能力。与第一代Spring Cloud Netflix Zuul相比&#xff0c;Spring Cloud Gateway在性能、可扩展性、易用性等方面都有了显著的提升。…

【VS2022】运行cmake项目

在这里插入代码片https://github.com/kitamstudios/rust-analyzer.vs/blob/master/PREREQUISITES.md Latest rustup (Rust Toolchain Installer). Install from here. Welcome to Rust!This will download and install the official compiler for the Rust programming langua…

go语言每日一练——链表篇(六)

传送门 牛客面试必刷101题—— 判断链表中是否有环 牛客面试必刷101题—— 链表中环的入口结点 题目及解析 题目一 代码 package mainimport . "nc_tools"/** type ListNode struct{* Val int* Next *ListNode* }*//**** param head ListNode类* return bool…

vue3-内置组件-TransitionGroup

<TransitionGroup> 是一个内置组件&#xff0c;用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。 与 <Transition> 的区别 <TransitionGroup> 支持和 <Transition> 基本相同的 props、CSS 过渡 class 和 JavaScript 钩子监听器&…

代驾应用系统(ssm)

登录首页 管理员界面 代驾司机界面 普通用户界面 前台页面 1、系统说明 &#xff08;1&#xff09; 框架&#xff1a;spring、springmvc、mybatis、mysql、jsp &#xff08;2&#xff09; 系统分为前台系统、后端管理系统 2、欢迎留言联系交流学习讨论&#xff1a;qq 97820625…

wsl 安装minikube

Minikube是一种轻量化的Kubernetes集群&#xff0c;专为开发者和学习者设计&#xff0c;以便他们能够更好地学习和体验Kubernetes的功能。它利用个人PC的虚拟化环境&#xff0c;实现了Kubernetes的快速构建和启动。目前&#xff0c;Minikube已经支持在macOS、Linux和Windows平台…

部署 Spring 项目到 Linux 云服务器上

关于 Linux 服务器安装 JDK ,Mysql&#xff0c;配置安全组&#xff08;这些都是必要的&#xff09; 推荐看在 Linux 上搭建 Java Web 项目环境&#xff08;最简单的进行搭建&#xff09; 流程 1.上传Jar包到服务器 要想部署 Spring 项目&#xff0c;先要将 Spring 项目打成 J…

Linux--文件

文件的基本信息 文件是计算机系统中存储数据的一种单位。 它可以是文本、图像、音频、视频等信息的载体。文件通常以特定的格式和拓展名来表示其内容和类型。 在计算机系统中&#xff0c;文件使用文件名来唯一标识和访问。文件可以被创建、读取、写入、复制、移动、删除等操作…

相机图像质量研究(8)常见问题总结:光学结构对成像的影响--工厂调焦

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…