Linux下C/C++的gdb工具与Python的pdb工具常见用法之对比

news2024/10/6 4:01:14

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 sys

class 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.coloradmin.cn/o/841872.html

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

相关文章

C#与C/C++交互(1)——需要了解的基础知识

【前言】 C#中用于实现调用C/C的方案是P/Invoke&#xff08;Platform Invoke&#xff09;&#xff0c;让托管代码可以调用库中的函数。类似的功能&#xff0c;JAVA中叫JNI&#xff0c;Python中叫Ctypes。 常见的代码用法如下&#xff1a; [DllImport("Test.dll", E…

关于游戏的笔记

关于搭建秦时明月2一键端&#xff0c;并且开启秘境神秘商人东海寻仙幻化 1.该游戏下主要的目录 gm端 服务框架 服务端 2.修改对应的文件 C:\qs\Q2Server\server\conf_common\ManagerAddress.xmlC:\qs\Q2Server\server\conf_manager\GateServer.xml修改ip 3.启动gm startup…

SpringCloud(32):Nacos配置管理应用于分布式系统

1 从单体架构到微服务 1.1 单体架构 Web应用程序发展的早期&#xff0c;大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行&#xff0c;所有功能 模块使用同一个数据库&#xff0c;同时&#xff0c;它还提供API或者UI访问的web模块等。 尽管也是模块化逻辑…

事务,不只ACID | 京东物流技术团队

1. 什么是事务&#xff1f; 应用在运行时可能会发生数据库、硬件的故障&#xff0c;应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题&#xff0c;为了提高应用的可靠性和数据的一致性&#xff0c;事务应运而生。 从概念上讲&#xff0c;事务…

ML之特征工程进阶

术语表 术语 释义 sklearn fraternization 特征工程 Feature scaling 特征缩放 Feature Retrieval 特征检索 NLP 全称: Natural Language Processing 自然语言处理 Corpus 语料库 特征工程概述 定义 特征工程并非是一个问题&#xff0c;而是关于特征的一系列问题…

这应该是最全的,Fiddler手机App抓包详解,看完还不会来找我...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是抓包&#…

Centos7配置网卡信息及固定IP

找到网卡配置文件 Centos7之后的网卡配置文件统一放在/etc/sysconfig/network-scripts&#xff0c;在这个目录会找到以ifcfg开头的&#xff0c;和本机网卡数量对应的配置文件&#xff0c;如下: 执行该命令,进入该目录: cd /etc/sysconfig/network-scripts 再执行该命令 ll …

DAY02_Spring—第三方资源配置管理Spring容器Spring注解开发Spring整合Mybatis和Junit

目录 一 第三方资源配置管理1 管理DataSource连接池对象问题导入1.1 管理Druid连接池1.2 管理c3p0连接池 2 加载properties属性文件问题导入2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 二 Spring容器1 Spring核心容器介绍问题导入1.1 创建容器1.2 获取bean…

Killing LeetCode [83] 删除排序链表中的重复元素

Description 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 Intro Ref Link&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ Difficulty&#xff1a;Easy Tag&am…

生信学院|08月18日《基于Flow Simulation的冷链运输产品案例》

课程主题&#xff1a;基于Flow Simulation的冷链运输产品案例 课程时间&#xff1a;2023年08月18日 14:00-14:30 主讲人&#xff1a;江流洋 生信科技 CAE专家 1、达索仿真方案介绍 2、项目介绍 3、案例分析 请安装腾讯会议客户端或APP&#xff0c;微信扫描海报中的二维码…

消息队列常见问题(1)-如何保障不丢消息

目录 1. 为什么消息队列会丢消息&#xff1f; 2. 怎么保障消息可靠传递&#xff1f; 2.1 生产者不丢消息 2.2 服务端不丢消息 2.3 消费者不丢消息 3. 消息丢失如何快速止损&#xff1f; 3.1 完善监控 3.2 完善止损工具 1. 为什么消息队列会丢消息&#xff1f; 现在主流…

0140 数据链路层2

目录 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 1.如果使用5类UTP来设计一个覆盖范围为200m的10BASE-T以太网&#xff0c;需要采用的设备是&#xff08;&#xff09; A.放大器 …

11. Redis基础知识

文章目录 一、概述二、数据类型STRINGLISTSETHASHZSET 三、数据结构字典跳跃表 四、使用场景计数器缓存查找表消息队列会话缓存分布式锁实现其它 五、Redis 与 Memcached数据类型数据持久化分布式内存管理机制 六、键的过期时间七、数据淘汰策略八、持久化RDB 持久化AOF 持久化…

网络可靠性之链路聚合

网络的可靠性 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力网络的可靠性是可以从单板、设备、链路多个层面实现。 链路聚合 以太网链路聚合&#xff1a; 通过将多个物理接口捆绑成为一个逻辑接口&#xff0c;可以再不进行硬件升级的条件下&a…

新手注意事项-visual studio 来实现别踩白块儿

自己之前为了熟悉easyx练习过一个简单的项目&#xff0c;别踩白块儿&#xff0c;链接在这里&#xff0c;别踩白块儿&#xff0c;当时比较稚嫩&#xff0c;很多东西都不会&#xff0c;可以说是只知道最基本的语法&#xff0c;头文件都不知道&#xff0c;一个一个查资料弄懂的&am…

实现无限存储:基于JuiceFS 创建 Samba 和 NFS 共享

随着企业数据量的持续增长&#xff0c;存储容量需求日益增大。如何采用没有容量上限的云存储替换本容量有限的本地磁盘&#xff0c;已成为广泛的需求和共识。特别是在企业中常用的 Samba 和 NFS 共享&#xff0c;如果能够使用云存储作为底层存储&#xff0c;就能有效解决存储扩…

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…

API接口用例生成器

一、前言 随着自动化测试技术的普及&#xff0c;已经有很多公司或项目&#xff0c;多多少少都会进行自动化测试。 目前本部门的自动化测试以接口自动化为主&#xff0c;接口用例采用 Excel 进行维护&#xff0c;按照既定的接口用例编写规则&#xff0c;对于功能测试人员来说只…

SQL Server数据库如何添加Oracle链接服务器(Windows系统)

SQL Server数据库如何添加Oracle链接服务器 一、在添加访问Oracle的组件1.1 下载Oracle的组件 Oracle Provider for OLE DB1.2 注册该组件1.2.1 下载的压缩包解压位置1.2.2 接着用管理员运行Cmd 此处一定要用管理员运行&#xff0c;否则会报错 二、配置环境变量三、 重启SQL Se…

再探C++——默认成员函数

目录 一、构造函数 二、析构函数 三、赋值运算符 四、拷贝构造 如果一个类中没有成员&#xff0c;我们称为空类。空类&#xff0c;也存在6个默认的类成员函数。 默认成员函数&#xff1a;用户不显示地写&#xff0c;编译器会默认生成的函数叫做默认成员函数。 6个默认成员…