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命令执行差异对比

gdbpdb
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的用法远不局限于本文,具体可根据实际的使用需求查阅相关文档。

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

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

相关文章

【Spring Boot】Spring Boot 集成 RocketMQ 实现简单的消息发送和消费

文章目录 前言基本概念消息和主题相关发送普通消息 发送顺序消息RocketMQTemplate的API介绍参考资料&#xff1a; 前言 本文主要有以下内容&#xff1a; 简单消息的发送顺序消息的发送RocketMQTemplate的API介绍 环境搭建&#xff1a; RocketMQ的安装教程&#xff1a;在官网…

Qt下载慢/无法下载解决方式

文章目录 一. Qt在线安装下载二. 安装方式 一. Qt在线安装下载 官网下载&#xff1a;https://www.qt.io/download清华源下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ 二. 安装方式 进入下载好的目录 在目录栏输入CMD&…

常州同和采购益高观光车提升服务品质

同和纺织机械制造有限公司坐落于江苏省常州市戚墅堰经济开发区,是中国纺织工业联合会常务理事单位、国家高新技术企业。公司占地面积30万平方米,现代化厂房建筑面积20万平方米。 随着公司发展,企业意识到通过提供高品质的客户接待服务来增强竞争力。为了满足这一需求,常州同和…

MyBatis 查询数据库之二(增、删、改、查操作)

目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper&#xff08;interface&#xff09;里面添加增加方法的声…

ROS添加发布者和订阅者机制实现

一. ROS的节点和包 ✨Node&#xff1a; ROS的基本单位&#xff0c;实现某个功能的节点。比如实现超声波传感器就是一个节点&#xff0c;雷达传感器就可以是一个节点 ✨Package&#xff1a; 多个有联系的节点组成的单位&#xff0c;比如你要控制无人机姿态&#xff0c;可能需要…

WebGL Shader着色器GLSL语言

在2D绘图中的坐标系统&#xff0c;默认情况下是与窗口坐标系统相同&#xff0c;它以canvas的左上角为坐标原点&#xff0c;沿X轴向右为正值&#xff0c;沿Y轴向下为正值。其中canvas坐标的单位都是’px’。 WebGL使用的是正交右手坐标系&#xff0c;且每个方向都有可使用的值的…

Ajax快速入门

文章目录 Ajax原生ajaxaxios案例 Ajax Ajax就是前端访问服务器端数据的一个技术 还有主要就是异步交互 就是在不刷新整页面的情况下&#xff0c;和服务器交换部分我也数据 比如搜索的联想技术 同步和异步的概念 一个是客户端需要等待服务器完成处理&#xff0c;才能进行别的事…

力扣 | 清空注释

c 注释有两种&#xff0c;一种是 // 另一种是 /**/ 简单理解就是把所有的注释内容清空&#xff0c;然后只保留未注释内容 思路&#xff08;模拟&#xff09;&#xff1a;因为代码是一行一行的记录下来的&#xff0c;遍历每一行代码。有两种情况&#xff0c;第一种&#xff0c;如…

【音视频】edge与chrome在性能上的比较

目录 结论先说 实验 结论 实验机器的cpu配置 用EDGE拉九路​编辑 google拉五路就拉不出来了 资源使用情况 edge报错​编辑 结论先说 实验 用chrome先拉九路&#xff0c;再想用edge拉九路&#xff0c;发现拉五路后怎么也拉不出&#xff1b; 后面发现cpu爆满&#xff1b;切…

实证研究在机器学习中的应用

实证研究是一种基于实际数据和事实的科学研究方法&#xff0c;目的是通过观察、测量、分析和解释数据来验证或否定某个假设、理论或研究问题。这种研究方法通常用于社会科学、自然科学和医学等领域。以下是实证研究的详细解释&#xff1a; 研究目标&#xff1a;实证研究旨在通过…

C++---list常用接口和模拟实现

list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数&#xff0c;拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…

【flowable介绍】

这里写目录标题 1.flowable官⽅⽂档2.flowable相关表说明3.操作名词解释 1.flowable官⽅⽂档 flowable官⽅⽂档&#xff1a;https://flowable.com/open-source/docs/bpmn/ch02-GettingStarted/ 基于6.5中⽂翻译⽂档&#xff1a;https://l1yp.com/docs/flowable/bpmn/#bpmnGate…

【cf】CodeForces Round 890(Div.2)题解 A - C

A. Tales of a Sort 题意 给出一个数组&#xff0c;每次操作可以将 所有 元素 a [ i ] a[i] a[i] 变成 m a x ( 0 , a i − i ) max(0,a_i-i) max(0,ai​−i)&#xff0c;问至少操作多少次能将数组变成递增数组 思路 这一题卡很久&#xff0c;最后发现踩了两个坑 题目读…

前端笔记html-layer使用

layer.open方法 layer.open({type:2, //可传入的值有&#xff1a;0&#xff08;信息框&#xff0c;默认&#xff09;1&#xff08;页面层&#xff09;2&#xff08;iframe层&#xff09;3&#xff08;加载层&#xff09;4&#xff08;tips层&#xff09;title: title,content:[…

Python-flask项目入门

一、flask对于简单搭建一个基于python语言-的web项目非常简单 二、项目目录 示例代码 git路径 三、代码介绍 1、安装pip依赖 通过pip插入数据驱动依赖pip install flask-sqlalchemy 和 pip install pymysql 2.配置数据源 config.py DIALECT mysql DRIVER pymysql USERN…

Spring(11) Bean的生命周期

目录 一、简介二、Bean的流程1.BeanDefinition2.Bean 的生命周期 三、代码验证1.User 实体类2.MyBeanPostProcessor 后置处理器3.SpringConfig 扫描包配置4.UserTest 测试类5.测试结果6.模拟AOP增强 一、简介 首先&#xff0c;为什么要学习 Spring 中 Bean 的生命周期呢&#…

反弹shell的N种姿势

预备知识1. 关于反弹shell 就是控制端监听在某TCP/UDP端口&#xff0c;被控端发起请求到该端口&#xff0c;并将其命令行的输入输出转到控制端。reverse shell与telnet&#xff0c;ssh等标准shell对应&#xff0c;本质上是网络概念的客户端与服务端的角色反转。2. 反弹shel…

webpack性能优化

文章目录 1. 性能优化-分包2. 动态导入3. 自定义分包4. Prefetch和Preload5. CDN加载配置6. CSS的提取7. terser压缩7.1 Terser在webpack中配置7.2 css压缩 8. Tree Shaking 消除未使用的代码8.1 usedExports 配置8.2 sideEffects配置8.3 CSS实现Tree Shaking 9. Scope Hoistin…

k8s概念-污点与容忍

k8s 集群中可能管理着非常庞大的服务器&#xff0c;这些服务器可能是各种各样不同类型的&#xff0c;比如机房、地理位置、配置等&#xff0c;有些是计算型节点&#xff0c;有些是存储型节点&#xff0c;此时我们希望能更好的将 pod 调度到与之需求更匹配的节点上。 此时就需要…

人工智能在心电信号分类中的应用

目录 1 引言 2 传统机器学习中的特征提取与选择 3 深度学习中的特征提取与选择