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 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...