C++代码里增加调试打印消息

【Qt项目实战】使用脚本拓展CPP应用程序(2)——Lua脚本及编辑器 Lua实战进阶 阅读详情

1.在头文件里加入以下宏定义代码

#ifdef _DEBUG
#include <stdio.h>
	#define xPrintf(...) printf(__VA_ARGS__)
#else
	#define xPrintf(...) 
#endif //_DEBUG

2.在需要输出调试信息的代码块增加打印消息,注意return语句的上方,如下所示:

void* MemoryAlloc::allocMem(size_t nSize)
{
	if (!_pBuf)
	{
		initMemory();
	}
	MemoryBlock* pReturn = nullptr;
	//当前内存不足的情况
	if (nullptr == _pHeader)
	{
		pReturn = (MemoryBlock*)malloc(nSize + sizeof(MemoryBlock));

		pReturn->bPool = false;
		pReturn->nID = -1;
		pReturn->nRef = 0;
		pReturn->pAlloc = nullptr;
		pReturn->pNext = nullptr;
	}
	else
	{
		pReturn = _pHeader;
		_pHeader = _pHeader->pNext;
		assert(0 == pReturn->nRef);
		pReturn->nRef = 1;
	}
	xPrintf("allocMem:%lx, id = %d, size = %d\n", pReturn, pReturn->nID, nSize);
	return ((char*)pReturn + sizeof(MemoryBlock));
}

3.结果:当编译器切换至Debug模式运行时,每次分配内存时会打印该内存分配信息,当切换至Release模式运行时则不会打印。

知识补充:

1.关于__VA_ARGS__
__VA_ARGS__它是一个可变参数的宏,就是将左边宏中“…” 的内容原样抄写在右边 VA_ARGS 所在的位置。
…缺省号代表一个可以变化的参数表。使用保留名 VA_ARGS 把参数传递给宏。当宏的调用展开时,实际的参数就传递给 printf()了。

log4cpp学习笔记 Log4cppcp的简单介绍 阅读详情

相关推荐

第1章 开始使用C++

开始使用C++开始使用C++1.1 安装Miscrosoft Visual Studio 2015/20171.2 用Miscrosoft Visual Studio创建项目1.3 用Microsoft Visual Studio写程序1.4 用Visual Studio 运行程序1.5兼容性问题 #1:stdafx.h或pch.h1.6 兼容性问题#2:暂停屏幕1.7 如果不使用Visual S...

ALZ-one的博客 400

【UE4 C++】打印输出调试文本信息的三种方式

一、打印在屏幕窗口 UKismetSystemLibrary::PrintString(this, TEXT("Successed Produce NPC:%s"),*produceTip); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("Successed Produ...

ColorGalaxy 1万+

C++零基础教程(C++中的打印)

本篇文章我们来学习如何在C++中打印数据,在C语言中我们会使用hello world来打印数据,那么在C++中是如何实现数据的打印呢?本篇文章就讲解到这里,希望大家好好理解并做实验尝试。

m0_49476241的博客 1万+

c++输出调试信息到vs中的输出窗口

在用vs写win32的c++程序时是没有命令行的,所以printf是不能用的。 但是调试的时候可以调用函数OutputDebugString来想vs的“输出”窗口里输出调试内容。像java中的System.out.println一样往IDE的调试窗口里输出信息。 OutputDebugString只接受字符串指针,如果要输出其他格式,如int型,可以用sprintf把字符转成字符串,在传...

weixin_30378623的博客 1223

Visual C++ 2010源程序第三章实战指南

本文还有配套的精品资源,点击获取 简介:本压缩包深入探讨了Visual C++ 2010集成开发环境及C++源程序结构。介绍了C++基础概念,包括变量、数据类型、运算符、控制流、数组、函数和指针。涉及MFC库用于Windows应用程序开发,STL的使用,以及编译和调试技巧。通过第三章的源代码示例,帮助学习者掌握理论知识与实践应用。 1. Visual C++ 20...

weixin_35390379的博客 1144

实用工具抓取youtube热门数据

YouTube作为全球第二大搜索引擎,2024年日均视频播放量突破50亿次,头部创作者单月广告分成可达百万美元量级。但对数据分析者而言,其反爬机制堪称业界最严: ‌反爬技术升级‌:Google部署的Botguard系统可检测异常流量,触发机制包括: 单IP每小时请求超过50次即封禁 检测Headless浏览器指纹(如Chrome的navigator.webdriver属性) 动态加载内容(如评论数据需滚动页面3次后加载) ‌数据价值维度‌:某MCN机构研究显示,前100热门视频的标题关键词复用率高达67%

26万+

C++ 自定义调试信息的输出

自定义调试信息的输出   调试信息的输出方法有很多种,  例如直接用printf,  或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进程则一般是使用syslog将调试信息输出到日志文件中等等...   使用标准的方法打印调试信息有时候不是很方便,  例如Qt编程, 在调试已有的代码时, 我想在打印调试信息的地方, 把代码位

beautifulworld68的专栏 1497

修复zookeeper未授权访问漏洞

【代码】修复zookeeper未授权访问漏洞。

qq_28392947的博客 4067

c++ 高级打印调试技巧

1、打印到debugview 使用api OutputDebugString,可以打印到debugview 中,在debug中可以使用过滤来过滤所要的打印的内容,我们在所有的条件中加上打印的level static void OutMessage(const char * level,const char * fmt, ...) { #ifdef _WIN32 va_list args; va_start(args, fmt); //char *buf = new char[10240]; char

qianbo042311的博客 1930

移远EC20模块USB模式切换的底层逻辑与驱动适配探秘

本文深入探讨了移远EC20模块USB模式切换的底层逻辑与驱动适配机制,详细解析了AT命令控制下的USB0与WWAN0模式差异。通过分析USB协议栈、内核驱动框架及网络子系统的交互,提供了模式切换的完整操作流程和常见问题解决方案,助力开发者优化4G通信模块在嵌入式设备中的稳定连接。

cc789的博客 843

手把手教你用LTspice仿真BUCK-BOOST电路(附波形分析)

本文详细介绍了如何使用LTspice进行BUCK-BOOST电路的仿真与波形分析,涵盖电路原理、CCM与DCM模式特性、效率优化及常见问题解决方案。通过实战案例,帮助工程师快速掌握升降压转换电路的设计与调试技巧,提升电力电子设计能力。

julia4scientist的博客 1046

如何用AI自动生成多线程C++代码?

最重要的是,AI生成的代码通常都带有详细的注释,这对于理解多线程的工作原理很有帮助。在C++中,std::thread是标准库提供的线程类,可以很方便地创建和管理线程。对于简单的打印任务,其实可以不用加锁,因为标准输出的operator<<本身就是线程安全的。不过还是要提醒大家,AI生成的代码需要仔细检查和测试,不能完全依赖。,它可以快速生成可运行的多线程代码示例,还能一键部署测试,非常方便。AI生成的代码可以作为很好的起点,但可能还需要根据具体需求进行调整和优化。生成的代码会包含必要的头文件,如。

YellowSun24的博客 469

基于Yolo11的无人机小目标检测系统的设计与性能优化改进项目实现

该项目旨在开发一个基于YOLO11的无人机目标检测系统,能够实时识别并定位无人机拍摄过程中捕捉的小目标。考虑到无人机拍摄的目标通常较小,系统将采用特定的调优策略,以提高小目标的检测精度和召回率。

m0_73723097的博客 1205

UE4C++(13):输出打印消息

一、目的 1、想:UE4C++(13):输出打印消息 二、参考 1、UE4C++(13):输出打印消息 https://blog.youkuaiyun.com/weixin_44200074/article/details/108358027 三、操作 1、

qq_40544338的博客 430

(Linux)DHCP 超级作用域和中继代理(超难受做了超久)

DHCP服务器在192.168.159.0 可以实现分配IP的功能,现在要跨网段分配IP 就需要用到DHCP中继代理。中继代理有两张网卡分别eth0:IP 192.168.159.2 ;eth1: IP:192.168.200.2 。现在要实现192.168.200.0网段的客户机可以获取DHCP服务器的IP。中继代理其实是相当于一个路由器的作用 DHCP服务器的IP地址 :192.168.159...

DJ_joker的博客 2223

西南交通大学车辆工程专业大四上车辆综合实训ame仿真部分

西南交通大学车辆工程专业大四上车辆综合实训ame仿真建模部分

qq_64814052的博客 1244

一、使用GDB调试程序

在 gdb 中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。GDB调试的是C/C++的程序,因此想要更好的调试程序,需要在编译时把调试信息加到可执行文件中,即使用编译器的 -g 参数。当进程被gdb停住时,你可以使用info program 来查看程序的是否在运行,进程号,被暂停的原因。如果没有-g,将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

future_sky_word的博客 2151

用Stata复现经典文献:上市公司全要素生产率(TFP)计算全流程(含LP/OP代码解读)

本文提供了使用Stata软件复现上市公司全要素生产率(TFP)计算的完整实战指南。重点解读了主流的Levinsohn-Petrin(LP)和Olley-Pakes(OP)半参数估计方法,通过详细的数据清洗、变量构建与价格平减步骤,手把手演示了如何准确测算TFP,并强调了LP方法在处理中国上市公司数据时的稳定性和适用性。

b0c1d2的博客 593

调用时,加断言assert.h与自制打印消息的记录

断言: 基本使用: //#defineNDEBUG//加上这个的话,断言都会失效 #include<assert.h> voidassert(scalarexpression);//只有assert里不满足条件就会报错 调试信息: #defineDEBUG...

chunhai5100的博客 924

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【C++|Linux系统编程】GDB调试

简称GDB是GNU项目开发的一款功能强大的命令行调试工具。GDB支持多种编程语言(C、C++、Go、Rust等)和多种处理器架构(x86、ARM等),是系统程序员和应用程序开发者的必备工具。学习GDB调试最好的教程就是官方文档。但对于小白直接上手常看官方文档是有难度的,通关这篇博客带大家入个门,使大家能对GDB调试有个基本的掌握,然后再通过官方文档进行查漏补缺。

千禧皓月的博客 904

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

入门log4cpp

  前言 项目实现过程中,需要检查、查找或者调试程序bug等,此时程序日志则较为清晰地展现代码的运行过程。目前接触到的方法有打印消息到控制台,将重要信息输出到某个文件比如txt文件,或者直接使用日志库。 为了方便移植,采用日志库的方式,目前主流的日志库有log4j、glog、log4cpp等等,本文采用log4cpp日志库。 实现步骤 1.下载源代码包; 2.编译链接; 3.配置环境...

ddffmm66的博客 273

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C/C++程序在GDB调试状态时的信号响应

转载至:http://www.wuzesheng.com/?p=1188 相信用GDB调试过程序的朋友都知道,C/C++程序在GDB调试状态是不能直接响应外部信号的。比如,你正在用GDB运行一个程序,然后,你按了Ctrl+C,GDB收到SIGINT信号,程序本身并不会收到这个信号。那么,倒底如何让GDB把信号传递给应用程序本身呢?且听我一一道来。 GDB中有一个handle命令,可

闲云孤鹤 1384

c++26新功能—契约编程

C++26引入契约编程新特性,旨在提升代码安全性与可维护性。契约分为前置条件(pre)、后置条件(post)和断言(contract_assert)三种形式,通过四种检查语义(忽略/观察/快速强制执行/强制执行)平衡调试与性能需求。契约允许在函数声明中嵌入预期行为约束,并提供自定义违反处理接口。示例展示了如何用契约验证向量规范化操作的前后条件。这一特性标志着C++在安全性方面的系统化改进,为开发者提供了更强大的错误预防机制。契约编程的引入体现了C++持续演进的发展趋势,有助于编写更可靠的代码。

fpcc的专栏 1449

一步步入门log4cpp

前言 项目实现过程中,需要检查、查找或者调试程序bug等,此时程序日志则较为清晰地展现代码的运行过程。目前接触到的方法有打印消息到控制台,将重要信息输出到某个文件比如txt文件,或者直接使用日志库。 为了方便移植,采用日志库的方式,目前主流的日志库有log4j、glog、log4cpp等等,本文采用log4cpp日志库。 实现步骤 1.下载源代码包; 2.编译链接; 3.配置环境变量;...

weixin_30505751的博客 184

C++基础——断言(assert)的实现

断言(assert) 断言(assert)是一行检查表达式的代码;当表达式求值为真,一切正常;但若表达式求值为假,则暂停程序,打印消息,并在可行的情况下启动调试器。 断言(assert)是一个宏,而非函数。 断言的使用 #include <assert.h> using namespace std; float division(float a, float b) { assert(b != 0); return a / b; } int main() { int a

qq_25065595的博客 2165

在C++中#pragma“可选预处理指令的作用“。

本质上是“可选预处理器指令”,用来告诉编译器在编译某段代码时启用或关闭某些特性,控制优化、对齐、警告、链接、头文件多重包含等行为。• 链接指定库(MSVC)• OpenMP 并行指令。• 头文件多重包含保护。• 控制结构体成员对齐。在 C/C++ 里,• 给编译器打印消息。

PythonWHN的博客 740
上一篇: 如何对Bit进行置位、复位和取反操作
下一篇: Window平台编译log4cpp使用方法记录 (一)
照书抄代码
博客等级 码龄8年 32粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值