开发GUI程序时同时打开一个控制台窗口进行调试多么惬意啊
2010-08-12 21:19 MudooT 阅读(1369) 评论(0) 编辑 收藏 举报
你是否在一个函数中嵌套了MessageBox用来输出某些值?如果你这么做过,那么你肯定知道这有多痛苦了!那么你肯定想要开另外的一个控制台窗口来解决这个问题,那么现在就教给你这个办法。
在WinAPI中有这样的一个函数AllocConsole(),这个函数顾名思义,alloc一个console。什么?就这么简单?对啊,就这么简单。在CreateWindow之前调用这个函数就可以了!哦,你说调用后不管是cout还是printf都不好使?哦,那当然了,你还需要把stdio重定向过来呀!也很简单!
freopen("conin$", "r+t", stdin);
freopen("conout$", "w+t", stdout);
freopen("conout$", "w+t", stderr);
哦对了,别忘了在结束程序前关掉这些“文件”哟!
fclose(stderr);
fclose(stdout);
fclose(stdin);
最关键的,既然有alloc就一定得有free了!不错,调用FreeConsole()来结束这一切吧!
请记住,控制台只能开一个!所以最好用一个singleton来封装它!

#include <stdio.h>
#include <windows.h>
class CDebugConsole
{
public:
static CDebugConsole* getInstance()
{
static CDebugConsole* _o = new CDebugConsole;
return _o;
}
~CDebugConsole(void)
{
fclose(stderr);
fclose(stdout);
fclose(stdin);
FreeConsole();
}
private:
CDebugConsole(void)
{
AllocConsole();
SetConsoleTitle("Debug Console");
freopen("conin$", "r+t", stdin);
freopen("conout$", "w+t", stdout);
freopen("conout$", "w+t", stderr);
}
CDebugConsole(const CDebugConsole&);
CDebugConsole& operator=(const CDebugConsole&);
};
恩 这样的话,你就不会多次调用拉!
使用的时候只需要CDebugConsole::getInstance()就可以了!
是不是把你多年悲剧的MessageBox忘掉了?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架