[自制调试工具]构建高效调试利器:Debugger 类详解

一、引言

在软件开发的漫漫征程中,调试就像是一位忠诚的伙伴,时刻陪伴着开发者解决代码里的各类问题。为了能更清晰地了解程序运行时变量的状态,我们常常需要输出各种变量的值。而 Debugger 类就像是一个贴心的调试助手,它能帮我们便捷地打印不同类型变量的信息。接下来,我们就详细剖析一下这个 Debugger 类。

二、Debugger 类概述

Debugger 类是一个专门为调试设计的工具类,它的主要功能是把不同类型的变量值输出到控制台,并且还能为每个变量附上一个自定义的别名,这样我们就能清楚地知道打印的是哪个变量。

三、类的结构与实现

1. 类的基本框架

#include <iostream>
#include <string>class Debugger {
public:Debugger() {}~Debugger() {}// 打印整数信息void showInt(int num, std::string str = "") {std::cout << str << ": " << num << std::endl;}// 打印浮点数信息void showDouble(double num, std::string str = "") {std::cout << str << ": " << num << std::endl;}// 打印字符串信息void showString(const std::string& strValue, std::string str = "") {std::cout << str << ": " << strValue << std::endl;}
};

在这个类中,我们定义了构造函数和析构函数。构造函数 Debugger() 为空,因为在创建 Debugger 对象时,不需要进行特殊的初始化操作;析构函数 ~Debugger() 同样为空,因为对象销毁时也没有需要特别处理的资源。

2. 具体功能函数

打印整数信息的 showInt 函数

void showInt(int num, std::string str = "") {std::cout << str << ": " << num << std::endl;
}

这个函数接收两个参数:一个是 int 类型的整数 num,另一个是可选的 std::string 类型的别名 str。函数的作用是把别名和整数的值输出到控制台。如果没有提供别名,就只输出整数的值。

打印浮点数信息的 showDouble 函数

void showDouble(double num, std::string str = "") {std::cout << str << ": " << num << std::endl;
}

showDouble 函数和 showInt 函数类似,只不过它接收的是 double 类型的浮点数 num。它会把别名和浮点数的值输出到控制台。

打印字符串信息的 showString 函数

void showString(const std::string& strValue, std::string str = "") {std::cout << str << ": " << strValue << std::endl;
}

此函数接收一个 const std::string& 类型的字符串引用 strValue 和一个可选的别名 str。它会把别名和字符串的值输出到控制台。

四、类的使用示例

int main() {int num = 10;double d = 3.14;std::string str = "Hello, World!";Debugger s;if (10 > 0) {num++;s.showInt(num, "if分支的num");s.showDouble(d, "if分支的d");s.showString(str, "if分支的str");} else {num = 11;s.showInt(num, "else分支的num");s.showDouble(d, "else分支的d");s.showString(str, "else分支的str");}return 0;
}

在 main 函数中,我们创建了一个 Debugger 对象 s。然后定义了一个整数 num、一个浮点数 d 和一个字符串 str。通过 if-else 语句模拟不同的程序分支,在每个分支中调用 Debugger 类的相应函数来打印变量的值和别名。

五、总结

Debugger 类为我们提供了一种简单而有效的方式来输出不同类型变量的信息,并且可以通过别名来区分不同的变量。它在调试过程中非常实用,能帮助我们快速定位问题。虽然这个类目前只支持整数、浮点数和字符串类型,但我们可以根据需要进行扩展,添加对其他数据类型的支持。这样,在开发过程中,我们就能更加高效地进行调试,让代码的问题无所遁形。

补充包: 使用模版函数让数据类型更普适

点击这里 跳转

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

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

相关文章

foobar2000 VU Meter Visualisation 插件汉化版 VU表

原英文插件点此 界面展示 下载 https://wwtn.lanzout.com/iheI22ssoybi 安装方式 解压安装文件&#xff0c;文件名为&#xff1a;foo_vis_vumeter-0.10.2_CHINIESE.fb2k-component

消息中间件对比与选型指南:Kafka、ActiveMQ、RabbitMQ与RocketMQ

目录 引言 消息中间件的定义与作用 消息中间件在分布式系统中的重要性 对比分析的四种主流消息中间件概述 消息中间件核心特性对比 消息传递模型 Kafka&#xff1a;专注于发布-订阅模型 ActiveMQ&#xff1a;支持点对点和发布-订阅两种模型 RabbitMQ&#xff1a;支持点…

liunx输入法

1安装fcitx5 sudo apt update sudo apt install fcitx fcitx-pinyin 2配置为默认输入法 设置-》系统-》区域和语言 点击系统弹出语言和支持选择键盘输入法系统 3设置设置 fcitx-configtool 如果没显示需要重启电脑 4配置fcitx 把搜狗输入法放到第一位&#xff08;点击下面…

WindowsPE文件格式入门05.PE加载器LoadPE

https://bpsend.net/thread-316-1-1.html LoadPE - pe 加载器 壳的前身 如果想访问一个程序运行起来的内存,一种方法就是跨进程读写内存,但是跨进程读写内存需要来回调用api,不如直接访问地址来得方便,那么如果我们需要直接访问地址,该怎么做呢?.需要把dll注进程,注进去的代码…

QGIS中第三方POI坐标偏移的快速校正-百度POI

1.百度POI&#xff1a; name,lng,lat,address 龙记黄焖鸡米饭(共享区店),121.908315,30.886636,南汇新城镇沪城环路699弄117号(A1区110室) 好福记黄焖鸡(御桥路店),121.571409,31.162292,沪南路2419弄26号1层B间 御品黄焖鸡米饭(安亭店),121.160322,31.305977,安亭镇新源路792号…

SQL的调优方案

一、前言 SQL调优是提升数据库性能的关键手段。需结合索引优化、SQL语句优化、执行计划分析及数据库架构设计等多方面综合处理。 二、索引优化 创建合适索引 高频查询字段&#xff1a;对WHERE、JOIN、ORDER BY涉及的字段创建索引&#xff0c;尤其是区分度高的字段&#xff08…

【项目管理】第一部分 信息技术 1/2

相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 概要 知识点&#xff1a; 现代化基础设施、数字经济、工业互联网、车联网、智能制造、智慧城市、数字政府、5G、常用数据库类型、数据仓库、信息安全、网络安全态势感知、物联网、大数…

【玩泰山派】1、mac上使用串口连接泰山派

文章目录 前言picocom工具连接泰山派安装picocom工具安装ch340的驱动串口工具接线使用picocom连接泰山派 参考 前言 windows上面有xshell这个好用的工具可以使用串口连接板子&#xff0c;在mac上好像没找到太好的工具&#xff0c;只能使用命令行工具去搞了。 之前查找说mac上…

【C++奇遇记】C++中的进阶知识(继承(一))

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

【Scratch编程系列】Scratch编程软件界面

Scratch是一款由麻省理工学院(MIT&#xff09; 设计开发的少儿编程工具。其特点是&#xff1a;使用者可以不认识英文单词&#xff0c;也可以不使用键盘&#xff0c;就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以了。 这个软…

开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法

智能提示 为要绑定Lua的蓝图创建模板文件&#xff0c;这会在Content/Script下生成lua文件 然后点击生成智能代码提示&#xff0c;这会在Plugins/Unlua/Intermediate/生成Intenllisense文件夹 打开VSCode,点击文件->将工作区另存为。生成一个空工作区&#xff0c;放置在工程…

QEMU-KVM加SPICE,云电脑诞生了

没错&#xff01;‌QEMU-KVM SPICE‌ 的组合&#xff0c;本质上就是一套‌轻量级云电脑&#xff08;云桌面&#xff09;‌的解决方案。通过虚拟化技术将计算资源池化&#xff0c;再通过SPICE协议提供流畅的远程桌面体验&#xff0c;用户用任意设备&#xff08;笔记本/平板/瘦客…

hashtable遍历的方法有哪些

在 Java 中&#xff0c;遍历 Hashtable&#xff08;或其现代替代品 HashMap&#xff09;有多种方式&#xff0c;以下是 6 种常用方法的详细说明和代码示例&#xff1a; 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …

如何完整迁移 Git 仓库 ?

Git 已经成为软件开发中版本控制和协作的事实上的标准。有时&#xff0c;开发人员可能需要将整个 Git 存储库 (包括其历史记录、分支和标记) 移动到新的位置或托管服务。在这个全面的指南中&#xff0c;我们将讨论在不丢失任何关键数据或历史记录的情况下无缝地重新定位完整 Gi…

BPSK调制器的作用和基本原理

BPSK&#xff08;Binary Phase Shift Keying&#xff0c;二进制相移键控&#xff09;调制器是数字通信系统中的关键组件&#xff0c;其核心作用是将二进制数字信号转换为模拟载波信号&#xff0c;通过相位变化传递信息。其具体作用的详细说明如下&#xff1a; 一、BPSK调制器的…

LeetCode-98. 验证二叉搜索树

一、题目 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的…

Python菜鸟教程(小程序)

目录 一.简易计算器 二.学生成绩分级 三.密码设置 四.作业选择 点赞收藏,评论支持 一.简易计算器 print(-------使用的运算符-------\n) print(1.加号) print(2.减号) print(3.乘号) print(4.除号) Aint(input(请输入第一个数: )) Bint(input(请输入第二个数: )) Fi…

Golang的Goroutine(协程)与runtime

目录 Runtime 包概述 Runtime 包常用函数 1. GOMAXPROCS 2. Caller 和 Callers 3. BlockProfile 和 Stack 理解Golang的Goroutine Goroutine的基本概念 特点&#xff1a; Goroutine的创建与启动 示例代码 解释 Goroutine的调度 Gosched的作用 示例代码 输出 解…

Dubbo(30)如何配置Dubbo的服务分片?

配置Dubbo的服务分片&#xff08;也称为服务分组&#xff09;可以帮助你将不同的服务实例分组&#xff0c;以实现隔离和管理。通过服务分片&#xff0c;可以在同一个注册中心中注册多个相同接口的服务&#xff0c;但它们属于不同的分组&#xff0c;消费者可以根据需要选择特定分…

文档的预解析

1. 预解析的核心目标 浏览器在正式解析&#xff08;Parsing&#xff09;HTML 前&#xff0c;会启动一个轻量级的 预解析器&#xff08;Pre-Parser&#xff09;&#xff0c;快速扫描文档内容&#xff0c;实现&#xff1a; 提前发现并加载关键资源&#xff08;如 CSS、JavaScrip…