Linux下C/C++的gdb工具与Python的pdb工具常见用法之对比
1、gdb和pdb分别是什么?
1.1、gdb
GDB(GNU Debugger)是一个功能强大的命令行调试工具,由GNU项目开发,用于调试C、C++等编程语言的程序。它在多个操作系统中都可以使用,包括Linux、MacOS和Windows(通过MinGW或Cygwin)。GDB提供了一系列命令和功能,使得开发者能够在程序执行过程中跟踪、检查和修改程序的状态。这可以帮助开发者诊断和解决程序中的问题。
1.2、pdb
Pdb是Python的内置调试工具,它是一个交互式的源代码调试器,可以用于调试Python程序。它提供了一个命令行界面,让开发者能够在程序执行过程中跟踪、检查和修改变量的值,以及设置断点、单步执行代码等操作。Pdb的使用非常灵活,可以在程序运行时手动介入,也可以在程序出现异常时自动进入调试模式。它还支持多线程和远程调试等功能,因此在Python开发中得到了广泛的应用。pdb是Python开发中非常有用的调试工具,它可以帮助开发者快速定位和解决问题。
2、安装方式
本部分分别列举在绝大多数情况下,在红帽系和debian系Linux的安装方式,以下方式并不代表所有的Linux都适用,如果以下安装方式不适用,可以考虑源码编译安装:
2.1、安装gdb
红帽系Linux:yum install gdb
debian系Linux:apt install gdb
2.2、安装pdb
跟随Python基础环境自带,无需安装
3、gdb与pdb命令执行差异对比
| gdb | pdb |
|---|---|
| gdb <C/C++编译后生成的运行文件名> | python3 -m pdb <Python脚本文件名> |
4、gdb与pdb常用命令参数
4.1、gdb
run或r:开始调试代码,并运行到第一个断点处,所以我们在开始调试前需要设置断点
n:运行到下一行代码
s:若当前代码行为调用一个函数,则进入函数中
b func_name/num:在某个函数或者某一行打上断点
break info:把所有的断点信息打出来
p name:把某个变量的值打出来,若全局变量和局部变量存在相同的变量,则根据当前作用域打印对应变量
set name = num:在不改变源程序的情况下,改变某个变量的值
c:在已经run的情况下,直接跳转到下一个断点处
set args:传参进行相应的调试
info break:查看所有的断点
4.2、pdb
p param:打印变量或者直接使用变量名
n:执行下一行,不进入函数体
s:进入函数体
r:执行到当前函数结束
a:在函数中时打印函数的参数和参数的值
c:继续执行至下一个断点
q:退出调试
l :查看当前位置前后11行代码
ll:查看当前函数的所有代码
w:打印堆栈信息,最新的帧在最底部
enter:重复上一条命令
b:显示目前所有断点
b linenum:在指定行设置断点
b filename:linenum:在指定文件的指定行设置断点
cl linenum:清楚指定断点
cl:清除所有断点
5、gdb和pdb工具的使用示例
5.1、gdb使用示例
C++示例代码如下:
#include <iostream>
using namespace std;
class testFunction{
public:testFunction(){cout << "以下是一个循环测试!" << endl;for(int i = 0;i < 10;i++){cout << "这是第" << i << "次循环!" << endl;};};void function1(){cout << "这是function函数" << endl;};
};
int main(int argc, char * argv[]){cout << "以下是上述测试类的实例化!" << endl;testFunction tF;tF.function1();cout << "以下是gdb传参测试结果:" << endl;for (int i = 0; i < argc; i++){cout << "参数值:" << argv[i] << endl;};return 0;
};

【注:使用g++编译C++代码或者使用gcc编译C代码时,需要在编译命令行中带-g参数以允许通过gdb调试】








5.2、Python使用示例
Python代码如下:
import sysclass testFunction(object):def __init__(self):print('这是一个循环测试!')for i in range(0, 10):print('这是第' + str(i) + '次循环!')def function1(self):print('这是function函数')if __name__ == '__main__':print('以下是上述测试类的实例化!')tF = testFunction()tF.function1()print('以下是pdb传参测试结果')for i in range(0,len(sys.argv)):print('参数值:' + sys.argv[i])









6、其他事项
本文仅对gdb和pdb的常用参数进行举例,gdb和pdb的用法远不局限于本文,具体可根据实际的使用需求查阅相关文档。
相关文章:
Linux下C/C++的gdb工具与Python的pdb工具常见用法之对比
1、gdb和pdb分别是什么? 1.1、gdb GDB(GNU Debugger)是一个功能强大的命令行调试工具,由GNU项目开发,用于调试C、C等编程语言的程序。它在多个操作系统中都可以使用,包括Linux、MacOS和Windows࿰…...
从入门到专业:探索Python中的判断与循环技巧!
文章目录 判断语句布尔类型和比较运算符if语句的基本格式练习案例:成年人判断if else语句if elif else语句判断语句的嵌套案例:猜数字 循环语句while循环的基础语法while循环的基础案例while循环的嵌套应用补充:print输出不换行&\tfor循环…...
mqtt、tcp、http的区别
文章目录 一、MQTT(Message Queuing Telemetry Transport)1、类型2、用途 二、TCP(Transmission Control Protocol)1、类型2、用途 三、HTTP(Hypertext Transfer Protocol)1、类型2、用途 四、主要区别1、类…...
边写代码边学习之RNN
1. 什么是 RNN 循环神经网络(Recurrent Neural Network,RNN)是一种以序列数据为输入来进行建模的深度学习模型,它是 NLP 中最常用的模型。其结构如下图: x是输入,h是隐层单元,o为输出ÿ…...
在linux调试进程PID的方法
当我们谈论调试 PID(进程标识符)时,我们通常是指诊断和解决与操作系统中的特定进程相关的问题。有许多工具和方法可用于调试 PID,以下是一些常见的方法: 1. 使用ps命令 ps命令是最基本的调试工具,用于查看…...
【并发编程】线程安全的栈容器
std::stack容器的接口包括 empty(), size(), top(), push(), pop()等。 问题 其原接口在多线程的情况下,会持续很多问题。 例如,在std::stack容器的接口中,在多线程下应用时,empty()和size()的结果是不可信的。因为尽管在某线程…...
ES嵌套查询和普通查询的高亮显示区别
在 Elasticsearch 中,高亮显示是一种强大的搜索结果可视化工具,它可以帮助我们快速识别匹配的关键字或短语。在ES中,我们可以使用两种不同的查询方式来实现高亮显示:嵌套查询和普通查询。本文探讨这两种查询方式的高亮显示区别以及…...
Greenplum集群部署
一,安装说明 1.1环境说明 *名称**版本*操作系统CentOS 7.6 64bitgreenplumgreenplum-db-6.10.1-rhel7-x86_64.rpm1.2集群介绍 IPhostname集群节点10.240.3.244gpmastermaster10.240.3.245gpsegment1segment10.240.3.246gpsegment2segment二,安装环境准备 2.1 修改各节点名称…...
电教智能云数据可视化平台开发电能优化日志实录
电教智能云数据可视化平台开发电脑优化日志实录 一、2K和4K弹窗判断二、电能API对接1.电脑爬虫2.电能分组过滤3.数据可视化渲染4.弹窗 三.数组按顺序输出 一、2K和4K弹窗判断 {* 判断2k和4k弹窗 *}{if $dataScene[scene_standard] eq 0}<a class"menuBtn subMenu"…...
JSX语法基础总结
题记:首先我们要了解一下jsx是什么,跟js有什么区别,其实就是js的语法糖,加上了xml的语法,使得产生虚拟dom更加的方便,简单说一下,xml就是存储数据的格式,想了解xml的话,可…...
socker套接字
1.打印错误信息 2.socketaddr_in结构体 结构体: (部分库代码) (宏中的##) 3.manual TCP: SOCK_STREAM : 提供有序地,可靠的,全双工的,基于连接的流式服务 UDP: 面向数据报...
No111.精选前端面试题,享受每天的挑战和学习
文章目录 map和foreach的区别在组件中如何获取vuex的action对象中的属性怎么去获取封装在vuex的某个接口数据有没有抓包过?你如何跟踪某一个特定的请求?比如一个特定的URL,你如何把有关这部分的url数据提取出来?1. 使用网络抓包工…...
【Apollo学习笔记】—— 相机仿真
文章目录 前言相关代码整理 测试实践文件目录包管理BUILD文件以及cyberfile.xml文件源程序BUILD运行结果其他参考CameraOutput channels启动camera驱动启动camera video compression驱动 前言 本文是对Cyber RT的学习记录,文章可能存在不严谨、不完善、有缺漏的部分࿰…...
【数据结构】——线性表的相关习题
目录 题型一(线性表的存储结构)题型二(链表的判空)题型三(单链表的建立)题型四(顺序表、单链表的插入删除操作)题型五(双链表的插入删除操作)题型六ÿ…...
SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用)
SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用) 文章目录 SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用…...
SpringBoot复习:(19)Condition接口和@Conditional注解
Condition接口代码如下: public interface Condition {boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);}它是一个函数式接口,只有一个方法matches用来表示条件是否满足。matches方法中的ConditionContext类对象context可以…...
K8s中的Controller
Controller的作用 (1)确保预期的pod副本数量 (2)无状态应用部署 (3)有状态应用部署 (4)确保所有的node运行同一个pod,一次性任务和定时任务 1.无状态和有状态 无状态&…...
【MFC】03.常用复杂控件的使用-笔记
热键: 对话框-类向导:初始化函数中,热键需要在最开始的时候就注册进去: 注册热键: 在这之前,先去定义一个宏,代表你这个快捷键。 参数:窗口句柄,热键编号(热…...
Autosar诊断实战系列14-NRC优先级解析
本文框架 前言1. NRC分类2. NRC优先级判断2.1. NRC优先级判断逻辑介绍2.2 NRC测试注意事项前言 在本系列笔者将结合工作中对诊断实战部分的应用经验进一步介绍常用UDS服务的进一步探讨及开发中注意事项, Dem/Dcm/CanTp/Fim模块配置开发及注意事项,诊断与BswM/NvM关联模块的应…...
《向量数据库指南》——腾讯云向量数据库Tencent Cloud VectorDB产品特性,架构和应用场景
腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持 10 亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提…...
JavaScript进阶:ES6+特性与异步编程
JavaScript进阶:ES6特性与异步编程 1. 技术分析 1.1 ES6概述 ES6为JavaScript带来了革命性的改进: ES6特性变量声明: let, const箭头函数: () > {}解构赋值: const {a, b} obj类: class语法模块化: import/export异步编程:Promiseasync/awaitGenerat…...
为什么所有人都在聊RAG?看这篇,小白也能彻底搞懂
你是否有过这样的经历——你满怀期待地问 AI 一个专业问题,它流畅地给了你一段"答案",引经据典、逻辑自洽。 结果一查,发现全是错的。一本正经地胡说八道。 这就是大语言模型(LLM)的致命短板:它…...
快速完成一篇重复率和AI率都很低的英文论文!(亲测有效)
写英文论文对于很多同学来说比较困难,今天给大家分享一下如何快速完成一篇英文论文。 直接说操作方法: 一、打开任何一个AI工具,输入指令:我是英文专业的毕业生,我的论文题目是《XXXX》,论文正文8000字&a…...
别再死记硬背了!用打王者荣耀掉帧的例子,5分钟搞懂视频编码里的I/P/B帧
游戏卡顿背后的秘密:用王者荣耀掉帧理解视频编码中的I/P/B帧 当你正沉浸在王者荣耀的激烈团战中,手指在屏幕上飞速滑动,准备释放关键技能时,画面突然卡顿——右上角的FPS数值从60骤降到20。这种令人抓狂的体验背后,隐藏…...
喜马拉雅FM音频下载器:跨平台VIP专辑下载完整指南
喜马拉雅FM音频下载器:跨平台VIP专辑下载完整指南 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字音频内容日益丰…...
告别卡顿!用华为云ECS搭建eNSP Pro大型网络实验的保姆级避坑指南
华为云ECS部署eNSP Pro全流程性能优化实战 当你在本地PC上尝试运行包含20台NE路由器的复杂拓扑时,风扇狂转的噪音和逐渐卡死的界面是否让你抓狂?作为一位曾经被32GB内存工作站折磨过的网络工程师,我完全理解这种痛苦。直到发现华为云ECS这个&…...
ArcGIS Pro 3.x 批量处理遥感栅格:用Python脚本实现自动化转点、计算与导出(附完整代码)
ArcGIS Pro 3.x 遥感栅格自动化处理实战:从数据清洗到生产级流水线构建 遥感数据分析师常常需要处理TB级的时序栅格数据,比如月度NDVI指数、地表温度或降水分布。传统手动操作不仅效率低下,还容易因人为失误导致数据不一致。本文将分享如何基…...
深度解析LevelUI:现代LevelDB可视化管理的完整实战指南
深度解析LevelUI:现代LevelDB可视化管理的完整实战指南 【免费下载链接】levelui A GUI for LevelDB management based on atom-shell. 项目地址: https://gitcode.com/gh_mirrors/le/levelui 在NoSQL数据库生态中,LevelDB以其出色的性能和简洁的…...
若依(RuoYi)框架安全自查清单:开发者必知的5个高危漏洞与修复方案
若依(RuoYi)框架安全自查清单:开发者必知的5个高危漏洞与修复方案 在当今快速迭代的软件开发环境中,安全防护已成为项目全生命周期中不可忽视的关键环节。作为国内广泛使用的快速开发框架,若依(RuoYi)凭借其模块化设计和丰富的功能集成&#…...
从STM32转战合泰HT32F52352:手把手教你用GPTM定时器搞定四路舵机PWM控制
从STM32到HT32F52352的平滑迁移:GPTM定时器实现四路舵机PWM控制实战 对于习惯了STM32生态的开发者而言,初次接触合泰HT32系列MCU时往往面临两个挑战:如何快速理解新芯片的架构设计,以及如何将已有的STM32开发经验有效迁移。HT32F…...
