当前位置: 首页 > news >正文

UI程序的std::cout重定向输出到Visual Studio的debug输出窗口

常用代码。
UI程序的std::cout重定向输出到Visual Studio的debug输出窗口

#include <iostream>
#include <streambuf>
#include <vector>
#include <string>
#include <afxwin.h> //MFC

// 自定义 streambuf 类,用于重定向输出到 Visual Studio 的输出窗口
class OutputDebugStreamBuf : public std::streambuf {
public:
	OutputDebugStreamBuf() : buffer(256) {
		setp(buffer.data(), buffer.data() + buffer.size() - 1);
	}

	~OutputDebugStreamBuf() {
		sync();
	}

protected:
	// 重写 overflow 方法,处理缓冲区溢出
	int_type overflow(int_type c) override {
		if (c != traits_type::eof()) {
			*pptr() = c;
			pbump(1);
			if (sync() != 0) {
				return traits_type::eof();
			}
		}
		return c;
	}

	// 重写 sync 方法,将缓冲区内容输出到 Visual Studio 的输出窗口
	int sync() override {
		if (pbase() != pptr()) {
			std::string output(pbase(), pptr() - pbase());
			OutputDebugStringA(output.c_str()); // 使用 OutputDebugStringA 输出
			setp(buffer.data(), buffer.data() + buffer.size() - 1); // 重置缓冲区
		}
		return 0;
	}

private:
	std::vector<char> buffer; // 缓冲区
};

// 管理 std::cout 重定向的类
class CoutRedirector {
public:
	CoutRedirector() {
		// 保存原始的 std::cout 缓冲区
		original_cout_buffer = std::cout.rdbuf();
		// 重定向 std::cout 到自定义的 streambuf
		std::cout.rdbuf(&debugStreamBuf);
	}

	~CoutRedirector() {
		// 恢复原始的 std::cout 缓冲区
		if (original_cout_buffer) {
			std::cout.rdbuf(original_cout_buffer);
		}
	}

private:
	OutputDebugStreamBuf debugStreamBuf; // 自定义的 streambuf
	std::streambuf* original_cout_buffer = nullptr; // 保存原始的 std::cout 缓冲区
};

// 全局变量,用于管理 std::cout 的重定向
CoutRedirector g_CoutRedirector;
http://www.dtcms.com/a/67924.html

相关文章:

  • 【C++项目实战】校园公告搜索引擎:完整实现与优化指南
  • Java 集合框架大师课:集合框架的暗黑料理(六)
  • SpeechCraf论文学习
  • Java常用API:String与ArrayList的设计哲学与实践应用
  • 基于Python实现的结合U - Net与Transformer的神经网络用于视网膜血管分割的示例代码
  • 通过Geopandas进行地理空间数据可视化
  • 【十五】Golang 结构体
  • 蓝桥杯备考:01背包之优化问题。
  • Excel地址
  • MySQL -- 表的约束
  • 【Rust】枚举和模式匹配——Rust语言基础14
  • 标贝自动化数据标注平台推动AI数据训练革新
  • 【python实战】-- 选择解压汇总mode进行数据汇总20250314更新
  • 铱星计划回顾2024.3.14
  • 面向对象程序设计,面向对象的概述,什么是对象,什么是面向对象呢
  • 贪心算法(6)(java)优势洗牌
  • HTML5前端第八章节
  • HashMap的奇幻漂流:当一个数组决定去整容
  • 基于SpringBoot的“城市公交查询系统”的设计与实现(源码+数据库+文档+PPT)
  • 让 Deepseek 写一个计算器(网页)
  • 安装并配置终端字体
  • Wubi用于UEFI支持和对最新Ubuntu版本的支持,是Windows Ubuntu安装程序
  • golang从入门到做牛马:第十九篇-Go语言类型转换:数据的“变形术”
  • 若依学习——检查当前请求是否为重复提交
  • AI 智能体的飞船, 很快到下个 Jump Point
  • 微软开源神器OmniParser V2.0 介绍
  • 【MySQL】表的约束(上)
  • Java序列化
  • C++刷题(一):顺序表 + 单链表
  • mne溯源相关说明