当前位置: 首页 > 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;

相关文章:

  • 【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 写一个计算器(网页)
  • 建设企业网站官网企业网银/销售怎么找客户源
  • 镇江市城市建设档案馆网站/魔方优化大师官网
  • 重庆玖玺国际做网站/百度链接收录提交入口
  • 龙华做网站哪家便宜/武汉seo优化服务
  • 网站网页设计0基础学/让顾客心动的句子
  • 企业手机网站建设讯息/商品推广