UNIX及UNIX-like环境下的调试工具gdb使用方法

embedded/2024/9/20 3:56:46/ 标签: linux, 运维, 服务器, gdb

准备工作

我们首先要将可执行程序变成debug版本。gcc编译器默认是release版本发布,那我们怎么将其变成debug版本呢?只需要在makefile文件中加上-g

debug版本和release版本的区别

先从文件大小初见端倪,debug版本的文件是要比release版本的文件大的

那我们具体如何在Linux环境下调试程序呢?

首先我们需要输入这样的一个命令:gdb+可调式程序名,注意这个程序必须是以debug版本发布的,也就是需要在makefile文件中用-g进行书写。

我们简写r,就可以直接运行程序(run),默认就是跑完了,但我们像调试的的话,需要打断点,那我们怎么打断点呢?

b + 行号就是给这一行打断点

如果有多文件,我们就是文件名+行号也是可以打的

info b用来查看断点

那如何删掉断点呢?

d 断点编号就是删除断点,注意这里的编号并不是行号,是断点的编号!

这里的第一列才是断点的编号

那我们如何禁用断点呢,禁用断点的意思就是,这个断点不使用了,但还会留下痕迹,跟VS编译器里面的空心断点是一样的

在Linux下我们采用disable 编号的形式进行禁用

再启用就是 enable 编号的形式

n 就是逐过程 F10

s 逐语句 F11

p :显示变量的内容和地址

display:变量名/去地址         常显示变量的内容和地址

那如果不想常显示呢?

undisplay + 编号,取消常显示变量的内容和地址

quit就是退出gdb调试

c:从一个断点运行到下一个断点(范围查找)

bt:查看调用堆栈

finish:将一个函数运行结束,就停下来(范围查找)VS编译器中就没有这个功能

until:在一定范围内,直接运行到指定行

set var name = value:修改一个变量的内容(不用改代码,多分枝测试)

总结:

肯定是没有VS图形化界面调试舒服,或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。


http://www.ppmy.cn/embedded/104329.html

相关文章

Leetcode 146. LRU 缓存

注意的点: 1、这道题本质是要求一个可以排序的字典(因为O(1)的时间复杂度就是字典),所以要不就用collections自带的OrderDict,要不然就用字典加双头链表自己实现一个。 2、OrderedDict的两个方…

汽车一些身份认证技术术语

一、技术概述 基于5G-V2X车路协同场景的身份认证技术,主要通过建立完整的身份认证体系和安全信任机制,确保车辆与道路基础设施之间、车辆与车辆之间以及车辆与云端之间的通信安全。该技术利用5G网络的通信能力,结合数字证书、密钥管理、加密…

TCP并发服务端的实现

思想:创建多个套接字,由"我"来管理这些套接字 方法: 1.多进程 2.多线程 3.IO多路复用 tcp服务器端创建流程: socket() bind() listen() connfd accept IO多路复用: 多个文件I复用同一个进程 IO…

idea插件开发(一)合并检查

一、引言 由于代码合并冲突的时候,代码丢失的情况频发,作者研究idea的VFS虚拟文件系统和Git4ide源码,创作idea插件检测代码合并丢失 可以区分主动删除与被动丢失,比如本地或者删除一段代码,合并之后不会被认为是丢失…

【HuggingFace Transformers】Bert Model的应用

Bert Model的应用 1. Sequence分类1.1 主要模块1.2 应用场景1.3 BertForSequenceClassification 源码解析 2. Token分类2.1 主要模块2.2 应用场景2.3 BertForTokenClassification 源码解析 3. 两种分类对比 在自然语言处理领域中,BERT 模型因其强大的文本理解能力被…

SpringBoot 基于iText 根据PDF模板动态生成文件

SpringBoot 基于iText 根据PDF模板动态生成文件, 需要使用 adobe acrobat pro DC这个工具来自定义模板 支持根据PDF模板生成单页或多页PDF文件 adobe acrobat pro DC 自定义模板 下载地址 链接:https://pan.baidu.com/s/1Vn3bIQ5_D17sEZnkF2t7gg?pwdn6o1 提取码…

Linux C自定义调试打印方法(用户态、内核态)

Linux C自定义调试打印方法(用户态、内核态) 前言用户态内核态 前言 在调试内核和驱动时,你是否会遇到不会加打印的烦恼,直接print后,由于添加的打印太多,没办法做到统一开启关闭debug的作用,下…

微信小程序 跳转

普通跳转 wx.navigateTo({url: /pages/xxx/xxx }) 返回 wx.navigateBack({})wx.navigateBack({delta: 0 }) 关闭当前页并跳转 wx.redirectTo({url: pages/xxx/xxx }) 切换主菜单 wx.switchTab({url: ../store/index }) 小程序跳转 wx.navigateToMiniProgram({appId: xx…

python基本语法总结

参考: Python 基础语法 | 菜鸟教程 (runoob.com) Python 语言与 Perl,C 和 Java 等语言有许多相似之处。但是,也存在一些差异。 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程。 第一个Python程序 python编写…

Redis 键值对操作全攻略

文章目录 一 . get 和 set二 . keys *三 . exists四 . del五 . expire六 . ttl七 . Redis 的 key 的过期策略八 . 定时器的实现8.1 基于优先级队列8.2 基于时间轮实现的定时器 九 . type十 . 数据库管理相关命令 Hello , 大家好 , 这个专栏给大家带来的是 Redis 系列 ! 本篇文章…

《深入理解JAVA虚拟机(第2版)》- 第6章 - 学习笔记

第6章 类文件结构 6.1 概述 字节码和二级制本地机器码(Native Code)是用来存储程序编译后的结果的,是二种程序存储结构。 6.2 无关性的基石 这里说的无关性,分为:平台无关性和语言无关性。 平台无关性:…

数学基础 -- 线性代数之伴随矩阵

伴随矩阵 1. 代数余子式 首先我们需要理解什么是代数余子式。对于一个 n n n \times n nn 的方阵 A A A,代数余子式 M i j M_{ij} Mij​ 是指从矩阵 A A A 中删除第 i i i 行和第 j j j 列后,剩下的子矩阵的行列式。 假设有一个 3 3 3 \time…

SSL证书如何保护IP地址的安全

SSL证书在保护IP地址安全方面起着至关重要的作用,主要通过以下几个方面来实现: 一、数据加密功能 SSL证书为通过IP地址进行的通信提供数据加密功能。这意味着,当数据通过IP地址在客户端和服务器之间传输时,SSL证书能够确保这些数…

数分基础(04)EXCEL常用快捷键-中等规模数据不用拼命滚轮

文章目录 1. 说明2. EXCEL常用快捷键 1. 说明 Excel适用于较小的或者中等规模的数据集,行数限制为1,048,576行,≥104万。 但很可能未及这个上限时,性能就显著下降,一般远低于此行数限制才比较流畅性,例如10万。 中小…

如何根据安装源码手动安装依赖

Homebrew 配方(Formula)核心部分: 1. url & sha256 用途: 指定软件包的下载地址和校验和,用于确保下载文件的完整性。示例: url "https://example.com/download/tool-1.0.0.tar.gz" sha256 "3bcbdbb9a50cc6f…

浅谈C#委托

一、基本介绍 委托是一种引用类型,它表示对方法的引用,即委托就是一种用来指向一个方法的引用类型变量。 委托(Delegate)是一种特殊的类型,它定义了方法的类型,使得可以将方法作为参数传递,或者…

Java EE

Java EE 包含JavaSE 增加一些新的API 构建一个后端服务 网页->web服务器->java后端 web后端(javaEE)程序需要运行在服务器中的,这样前端才可以访问得到 服务器:是容器,是连接用户和程序之间的中间件 解释1:一款软件&#…

网络原理基本概念

一.IP地址和端口号 IP地址指的是一台主机在互联网中所处的位置,相当于我们网购时填写的收货地址。IP地址是通过32位整数来进行表示的,为了方便查看,就使用了点分十进制的方式来进行表示IP地址。用户可以在电脑中使用cmd来看自己本台机器的IP地…

【Linux】进程概念

【Linux】进程概念 1. 基本概念2. 描述进程-PCB2.1 task_struct-PCB的一种2.2 task_ struct内容分类 3. 组织进程3.1 查看进程 4. 通过系统调用获取进程标示符4.1 获取进程标识符4.2 更改工作目录chdir 5 通过系统调用创建进程-fork初识5.1 接口认识5.2 返回值分析 1. 基本概念…

一种导出PPT到MP4的方法

需求 导出PPT到MP4,并记录每页,每个动作的时间线。通过 MP4时间线 就可以在页面上很方便的放映PPT的内容,并支持翻页点击。 代码 保存每一页的图像信息,用做播放器的缩略图 public void SaveThumbnail(string ppt_filepath, st…