C++简单日志/debug调试信息输出

news/2024/9/15 22:55:50/文章来源:https://www.cnblogs.com/smartljy/p/18395707

C++简单日志/debug调试信息输出

在写一些简单的小项目,或者算法题的时候,没有必要使用spdlog、log4cpp这样专门的日志库,但是如果把所有的调试语句都用

#ifdef DEBUG
...
#endif

这样的语句块包围,就太麻烦了,我们可以用一个宏/函数来替代这些每处都不得不插入的语句块。

1.最简单的宏

#ifdef DEBUG
#define DEBUG_LOG(x) std::cout << x << std::endl;
#else
#define DEBUG_LOG(x)
#endif

只能输出最简单的信息

DEBUG_LOG("This is a debug message");

2.类似的C++写法

#include <iostream>#ifdef DEBUG
#define DEBUG_STREAM std::cout
#else
#define DEBUG_STREAM if (false) std::cout
#endif

这种写法更加灵活,能够输出更多信息

DEBUG_STREAM << "Debug information" << std::endl;

3.内联函数

inline void debug_log(const std::string& msg) {
#ifdef DEBUGstd::cout << msg << std::endl;
#endif
}

虽然看起来更高级,但是它的用法和第一种一样十分受限

debug_log("This is a debug message");

4.对2.的纯C实现

#include <stdio.h>
#include <stdarg.h>// 定义一个调试输出的宏
#ifdef DEBUG#define DEBUG_LOG(fmt, ...) \do { \fprintf(stderr, "DEBUG: " fmt "\n", ##__VA_ARGS__); \} while (0)
#else#define DEBUG_LOG(fmt, ...) \do { } while (0)
#endifint main() {int x = 42;const char* str = "example";// 使用调试宏DEBUG_LOG("This is a debug message");DEBUG_LOG("Value of x: %d", x);DEBUG_LOG("This is a string: %s", str);return 0;
}

可以加入文件名、行号之类的输出,这样会更加清晰。

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

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

相关文章

Max–min 不等式,KTT 条件,以及不等式的对偶形式

嚙踝蕭嚙踝蕭打打だいず - Worlds end loneliness 打打 的 音 色太 具 代 表性 而且在这么高的 BPM 还能表达出清晰的感情,真乃神曲 . 依旧是笑林广记: 老僧往后园出恭,误被笋尖搠入臀眼,乃唤疼不止。小沙弥见之,合掌云:“阿弥陀佛,天报。” 在三次互反律证明之前发现有…

052205144张诗悦

这个作业属于哪个课程 软件工程这个作业要求在哪里 作业要求这个作业的目标 熟练使用AIGC 博客园 markdown,对课程的有一个清晰规划学号 052205144一、个人logo文生图任务 1.使用免费的AIGC图像生成工具为我的Github和博客园账号创建一个独特的个人Logo。使用工具:[豆包](豆…

论文速读纪录 - 202408

新鲜出炉的八月份论文阅读记录特别鸣谢kimi,以下论文均在kimi辅助下阅读。 目录RMIB: Representation Matching Information Bottleneck for Matching Text Representations AttentionRank: Unsupervised keyphrase Extraction using Self and Cross Attentions ANSWERING COM…

Redis 入门 - 简介

如何学习Redis,如何快速入门,相信Redis入门系列可以给你提供帮助。Redis是Remote Dictionary Server的缩写,可以翻译成远程字典服务。Redis是用C语言编写的开源项目。 Redis 最主要的特点就是高性能,对于简单的键值读取速度可以达到100000次/s,在理想情况下简单的键值写入…

2024软件工程博客园第一次作业

这个作业属于哪个课程 首页 - 软件工程2024 - 福州大学 - 班级博客 - 博客园 (cnblogs.com)这个作业要求在哪里 2024秋软件工程个人作业(第一次) - 作业 - 软件工程2024 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 搭建自己的博客,写下自己的个人情况和愿景学号 1022…

不可不知的WPF形状(Shape)

在WPF开发中经常需要进行绘制图形,可以利用Shape类型绘制基本的形状,而且Shape派生自FrameworkElement,属于UI元素范畴,可以直接利用XAML进行绘制。本文通过一些简单的小例子,简述如何通过Shape类绘制形状,仅供学习分享使用,如有不足之处,还请指正。在WPF开发中经常需要…

软件工程第一次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标 学会使用Aigc工具生成个人logo,搭建github个人网站,并熟悉markdown编辑,进行自我知识和技能评估学号 1022011…

日本出行

必备飞机 https://www.bilibili.com/video/BV1RC411J7tf/ 前3分钟 南航 全日空航空 出行公交卡(西瓜卡,首充1000 711消费完) 车次 15:42 https://www.bilibili.com/video/BV1j64y1A7x1/ 车次 13:24 https://www.bilibili.com/video/BV1RC411J7tf pasmo卡(只支持地铁,不支持…

智慧环卫:城市清洁的未来图景与技术革新

在智慧城市的宏伟蓝图中,“智慧环卫”正以其独特的姿态,悄然改变着城市的清洁与环境卫生管理方式。智慧环卫不仅仅是技术的简单应用,更是城市管理智慧化、生态化的重要体现。本文旨在深入探讨智慧环卫的内涵、技术支撑、实践案例及对城市环境改善的深远影响。智慧环卫:定义…

AWC 批量查询使用关系的最新版本并导出Excel

1.查询使用关系的方法:* 调用查询返回数据* @param {Object} data* @returns {Promise}* */ export let queryItemRevisionById = function (data) {if (!data.item_id) {messagingService.showInfo("请输入查询条件");return;}var item_id=data.item_id.dbValue.re…

Docker 简介

首先说明一些特性:一个容器中只有一个主进程,遵循单一原则,否则一个容器挂了会导致多个进程挂掉;容器其实就是一个进程,docker可以管理这些进程。docker能够进行容器隔离,我们操作的其实是docker客户端,而不是server端。 docker info # 查看docker信息docker基本概念 doc…

阿里重磅开源Qwen2-VL:超越人类的视觉理解能力,从医学影像到手写识别,这款开源多模态大模型究竟有多强?(附本地化部署教程)

阿里重磅开源Qwen2-VL:超越人类的视觉理解能力,从医学影像到手写识别,这款开源多模态大模型究竟有多强?(附本地化部署教程)模型介绍 最近呢,阿里巴巴开源了Qwen2-VL,在多模态大模型展现了在实际应用中的巨大潜力,尤其是在处理跨模态数据方面表现出众。以下是该模型的几…