【Linux】gdb调试器

一、gdb调试器背景

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

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

二、安装gdb 

yum install gdb

三、使用gdb

在Linux当中gcc/g++默认生成的可执行程序是release版本的,是不可被调试的。如果想生成debug版本,就需要在使用gcc/g++生成可执行程序时加上-g选项。

我们可以使用readelf指令查看ELF格式的文件信息:

 我们先写一个代码

 使用gdb + file命令进入调试:

1. l指令(显示代码)

l 0从第一行开始输入

2. b指令(设置断点) 

上面的意思是在21行设置一个断点 

3. info b(显示断点)

4. disable num(禁用断点) 

当Enb一栏为n是断点被禁用

5. enable num(启用断点) 

6. d num(删除断点) 

7. r指令(运行代码) 

运行代码在断点处停下。

8. n指令(逐过程运行代码)  

9. s指令(逐语句运行代码)  

 10. c指令(运行到下一个断点)  

11. bt指令(查看函数调用堆栈)

12. finish指令(执行完当前函数) 

13. p指令(临时查看变量) 

14. display指令(监视)

15. undisplay(取消监视) 

16. until指令(跳转) 

17. set var指令(修改变量的值)

 

四、指令总览 

【进入gdb】
指令: gdb 文件名

【调试】
1)「run/r」:运行代码(启动调试)。
2)「next/n」:逐过程调试。
3)「step/s」:逐语句调试。
4)「until 行号」:跳转至指定行。
5)「finish」:执行完当前正在调用的函数后停下来(不能是主函数)。
6)「continue/c」:运行到下一个断点处。
7)「set var 变量=x」:修改变量的值为x。

【显示】
1)「list/l n」:显示从第n行开始的源代码,每次显示10行,若n未给出则默认从上次的位置往下显示.。
2)「list/l 函数名」:显示该函数的源代码。
3)「print/p 变量」:打印变量的值。
4)「print/p &变量」:打印变量的地址。
5)「print/p 表达式」:打印表达式的值,通过表达式可以修改变量的值。
6)「display 变量」:将变量加入常显示(每次停下来都显示它的值)。
7)「display &变量」:将变量的地址加入常显示。
8)「undisplay 编号」:取消指定编号变量的常显示。
9)「bt」:查看各级函数调用及参数。
10)「info/i locals」:查看当前栈帧当中局部变量的值。

【断点】
1)「break/b n」:在第n行设置断点。
2)「break/b 函数名」:在某函数体内第一行设置断点。
3)「info breakpoint/b」:查看已打断点信息。
4)「delete/d 编号」:删除指定编号的断点。
5)「disable 编号」:禁用指定编号的断点。
6)「enable 编号」:启用指定编号的断点。

【退出gdb】
1)「quit/q」:退出gdb。

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

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

相关文章

btrace使用记录

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、使用三、 推荐阅读 一、导…

【LLM Transparency Tool】用于深入分析和理解大型语言模型(LLM)工作原理的工具

背景 LLM Transparency Tool 是一个用于深入分析和理解大型语言模型(LLM)工作原理的工具,旨在增加这些复杂系统的透明度。它提供了一个交互式界面,用户可以通过它观察、分析模型对特定输入(prompts)的反应…

IPD流程开发阶段模板及表单

目录 简介 内容brief(部分截图) 作者简介 简介 最近一段时间因为公司这边需要规范化管理。 就顺便集中整理了一下各类资料。 部分资料呢,就按照类别逐步分享了出来。 正常来讲,每个公司都应该有一个部门, 来专…

CSS Grid网格布局

一、前言 二、Grid布局 1、基本介绍 2、核心概念 (1)网格容器 (2)网格元素 (3)网格列 (4)网格行 (5)网格间距 (6)网格线 三…

C语言 | Leetcode C++题解之第199题二叉树的右视图

题目: 题解: #define MAX_NODE_NUM 100 int* rightSideView(struct TreeNode* root, int* returnSize){if (root NULL) {*returnSize 0;return NULL;}int *res (int *)malloc(sizeof(int) * MAX_NODE_NUM);int cnt 0;struct TreeNode **record (st…

如何使用ossutil工具迁移本地文件到oss(最快速迁移方法)

1:下载ossutil工具,https://help.aliyun.com/zh/oss/developer-reference/install-ossutil(注:根据不同的版本去下载) 2:解压ossutil工具,并双击运行ossutil.bat文件。 3:输入配置命…

前端新手小白的第一个AI全栈项目---AI聊天室

前言 ok,大家好。- ̗̀(๑ᵔ⌔ᵔ๑)最近也是想做自己的第一个前后端分离的项目,刚好最近学了一点AI接口的实现。想着用接口做一个自己的ai聊天室并且尝试一下全栈式开发。中间真的解决了很多问题,也是成功之后也是想要将实现过程分享一下&a…

可持续性是 Elastic: 进步与新机遇的一年

作者:来自 Elastic Keith Littlejohns 我们最新的可持续发展报告(Sustainability Report)总结了 Elastic 又一个令人兴奋的进步年,我们的项目继续揭示新的机遇。过去的一年对于我们与主要利益相关者群体合作以更好地了解他们的目标…

Linux-笔记 OverlayFS文件系统小应用 恢复功能

前言 通过另一章节 OverlayFS文件系统入门 中已经大致了解了原理,这里来实现一个小应用。通过前面介绍我们已经知道lowerdir是只读层,upperdir是可读写层,merged是合并层(挂载点),那么我们可以利用这个机…

火车头采集器Discuz采集发布模块插件

火车头采集器怎么采集发布数据到Discuz系统的论坛帖子或门户文章? 可按照以下步骤配置: 1. 火车头采集器Discuz采集发布插件下载安装: 火车头采集器Discuz发布模块插件下载地址-CSDN 2. 在火车头采集器工具导入Discuz采集发布模块插件&am…

ComfyUI如何使用Face Detailer和ComfyI2I插件进行修脸

一.插件ComfyI2I使用 1.ComfyUI中调用Mask Ops 2.创建蒙版插件BBOX Detector(combined) 3.创建UltralyticsDetectorProvider 里面包含多个模型其中bbox/face_yolov8m.pt是针对脸部修复 4.组合后测试脸部蒙版识别是否正常 5.测试正常后调出Inpaint Segments,放大…

线上民族传统服饰商城

摘 要 随着互联网的不断发展和普及,电子商务成为了人们生活中不可或缺的一部分。传统的线下购物方式逐渐被线上购物所取代,人们越来越习惯在互联网上购物。而民族传统服饰作为我国丰富多样的民族文化的重要组成部分,具有独特的艺术价值和商业…

PostMan动态设置全局变量

1. 前言 在开发过程中调试接口,一般都会使用PostMan。 其中有几个变量可能是好几个接口共用的,就会出现频繁手动复制(ctrlc)、粘贴(ctrlv)的情况。 这个过程得非常留意,生怕复制错了,或删减了某些东西,导致接口报错。…

【STM32-存储器映射】

STM32-存储器映射 ■ STM32F1-4G地址空间分成8个块■ STM32F1-Block0■ STM32F1-Block1■ STM32F1-Block2■ STM32F1- ■ STM32F1-4G地址空间分成8个块 ■ STM32F1-Block0 有出厂 BootLoader 就可以使用串口下载程序。如Keil5图中IROM地址是0x8000000 开始 就是flash地址 ■ S…

微服务和kafka

一、微服务简介 1.单体架构 分布式--微服务--云原生 传统架构(单机系统),一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统一部署,一个进程 all in one的架构方式,把所有的…

flink的窗口

目录 窗口分类 1.按照驱动类型分类 1. 时间窗口(Time window) 2.计数窗口(Count window) 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器: 窗口函数 增量聚合函数: 全窗口函数…

非极大值抑制算法(Non-Maximum Suppression,NMS)

https://tcnull.github.io/nms/ https://blog.csdn.net/weicao1990/article/details/103857298 目标检测中检测出了许多的候选框,候选框之间是有重叠的,NMS作用重叠的候选框只保留一个 算法: 将所有候选框放入到集和B从B中选出分数S最大的b…

探讨数字化背景下VSM(价值流程图)的挑战和机遇

在信息化、数字化飞速发展的今天,各行各业都面临着前所未有的挑战与机遇。作为源自丰田生产模式的VSM(价值流程图),这一曾经引领制造业革命的工具,在数字化背景下又将如何乘风破浪,应对新的市场格局和技术变…

西门子智能电气阀门定位器在冶金生产控制的应用

西门子智能电气阀门定位器在冶金生产控制的应用 1 前 言 在自动化程度越来越高的冶金行业中 ,调节阀起着至关重要的作用,一旦其发生故障, 轻则出现生产事故,停机,停炉影响各级生产指标,生产任务,影响装置的安全运行。重则可能出现人身安全事故,将直接影响家庭的幸福和企…

ubuntu 18 虚拟机安装(1)

ubuntu 18 虚拟机安装 ubuntu 18.04.6 Ubuntu 18.04.6 LTS (Bionic Beaver) https://releases.ubuntu.com/bionic/ 参考: 设置固定IP地址 https://blog.csdn.net/wowocpp/article/details/126160428 https://www.jianshu.com/p/1d133c0dec9d ubuntu-18.04.6-l…