VC++ 中用来调试和输出 console 信息的工具
/********************************************************************
创建日期: 2004/09/02
文件名称: DBWindow.h
作者: 袁桂芳(Fangrn)
版本: 2.0
邮箱: fangrn@163.com
创建目的:
用VC MFC/DLL编程时通常Debug版需要将测试信息通过控制台输出,而
编译成Release版时需要将这些输出调试信息的代码给注释掉,通
常这些代码较多操作比较麻烦。
这个程序的作用就是为了程序员在进行MFC/DLL软件开发时Debug版可以
在一个单独的控制台窗口进行调试程序的输出,而做成Release版时
不必手工将这些代码注释掉,由此程序自动完成。
注意:在一个进程之内只存在一个控制台窗口,对于多个可能同时调试的DLL
请用颜色识别。
版权声明:
您可以随意拷贝和使用这个程序的副本,但请保证所有文件的完整和
不被修改,如果您有修改意见,请与作者联系。
*********************************************************************/
#ifndef _DBWINDOW_
#define _DBWINDOW_
#include <windows.h>
//控制台输出时的文本颜色
#define WDS_T_RED FOREGROUND_RED
#define WDS_T_GREEN FOREGROUND_GREEN
#define WDS_T_BLUE FOREGROUND_BLUE
//控制台输出时的文本背景颜色
#define WDS_BG_RED BACKGROUND_RED
#define WDS_BG_GREEN BACKGROUND_GREEN
#define WDS_BG_BLUE BACKGROUND_BLUE
#ifdef COMDLL_EXPORTS
//设置控制台输出窗口标题
BOOL DBWindowTile(LPCTSTR tile);
//格式化文本输出
BOOL DBWindowWrite(LPCTSTR fmt,...);
//带颜色格式化文本输出
BOOL DBWindowWrite(WORD Attrs,LPCTSTR fmt,...);
#else
#define DBWindowTile
#define DBWindowWrite
#endif
#endif
/********************************************************************
创建日期: 2004/09/02
文件名称: DBWindow.cpp
作者: 袁桂芳(Fangrn)
版本: 2.0
邮箱: fangrn@163.com
创建目的:
用VC MFC/DLL编程时通常Debug版需要将测试信息通过控制台输出,而
编译成Release版时需要将这些输出调试信息的代码给注释掉,通
常这些代码较多操作比较麻烦。
这个程序的作用就是为了程序员在进行MFC/DLL软件开发时Debug版可以
在一个单独的控制台窗口进行调试程序的输出,而做成Release版时
不必手工将这些代码注释掉,由此程序自动完成。
注意:在一个进程之内只存在一个控制台窗口,对于多个可能同时调试的DLL
请用颜色识别。
版权声明:
您可以随意拷贝和使用这个程序的副本,但请保证所有文件的完整和
不被修改,如果您有修改意见,请与作者联系。
*********************************************************************/
#include "stdafx.h"
#include "DBWindow.h"
#ifdef COMDLL_EXPORTS
#include <tchar.h>
#include <stdio.h>
#include <stdarg.h>
#define CONSOLE_TILE _T("DBWindow Ver 2.0 by Fangrn")
class ConsoleWindow
{
public:
ConsoleWindow();
virtual ~ConsoleWindow();
BOOL SetTile(LPCTSTR lpTile);
BOOL WriteString(LPCTSTR lpString);
BOOL WriteString(WORD Attrs,LPCTSTR lpString);
private:
HANDLE m_hConsole;
BOOL m_bCreate;
BOOL m_bAttrs;
WORD m_OldColorAttrs;
};
ConsoleWindow::ConsoleWindow()
{
m_hConsole=NULL;
m_bCreate=FALSE;
if(AllocConsole())
{
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle(CONSOLE_TILE);
SetConsoleMode(m_hConsole,ENABLE_PROCESSED_OUTPUT);
m_bCreate=TRUE;
}
else{
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if(m_hConsole==INVALID_HANDLE_VALUE)
m_hConsole=NULL;
}
if(m_hConsole)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
if(GetConsoleScreenBufferInfo(m_hConsole, &csbiInfo))
{
m_bAttrs=TRUE;
m_OldColorAttrs = csbiInfo.wAttributes;
}
else{
m_bAttrs=FALSE;
m_OldColorAttrs = 0;
}
}
}
ConsoleWindow::~ConsoleWindow()
{
if(m_bCreate)
FreeConsole();
}
BOOL ConsoleWindow::SetTile(LPCTSTR lpTile)
{
return SetConsoleTitle(lpTile);
}
BOOL ConsoleWindow::WriteString(LPCTSTR lpString)
{
BOOL ret=FALSE;
if(m_hConsole)
{
ret=WriteConsole(m_hConsole,lpString,_tcslen(lpString),NULL,NULL);
}
return ret;
}
BOOL ConsoleWindow::WriteString(WORD Attrs,LPCTSTR lpString)
{
BOOL ret=FALSE;
if(m_hConsole)
{
if(m_bAttrs)SetConsoleTextAttribute(m_hConsole,Attrs);
ret=WriteConsole(m_hConsole,lpString,_tcslen(lpString),NULL,NULL);
if(m_bAttrs)SetConsoleTextAttribute(m_hConsole,m_OldColorAttrs);
}
return ret;
}
ConsoleWindow ConWindow;
#define MAX_BUF_LEN 4096
BOOL DBWindowTile(LPCTSTR tile)
{
return ConWindow.SetTile(tile);
}
BOOL DBWindowWrite(LPCTSTR fmt,...)
{
TCHAR message[MAX_BUF_LEN];
va_list cur_arg;
va_start(cur_arg,fmt);
_vsntprintf(message,MAX_BUF_LEN,fmt,cur_arg);
va_end(cur_arg);
return ConWindow.WriteString(message);
}
BOOL DBWindowWrite(WORD Attrs,LPCTSTR fmt,...)
{
TCHAR message[MAX_BUF_LEN];
va_list cur_arg;
va_start(cur_arg,fmt);
_vsntprintf(message,MAX_BUF_LEN,fmt,cur_arg);
va_end(cur_arg);
return ConWindow.WriteString(Attrs,message);
}
#endif
分享到:
相关推荐
### MFC中利用控制台输出调试信息 在开发大型软件项目时,特别是在使用Microsoft Foundation Classes (MFC)框架的情况下,调试复杂的应用程序是一项极具挑战性的任务。尤其对于那些运行时间较长的程序而言,了解...
VC调试常见错误 程序设计到多线程,VC++6.0默认设置可作以下修改: project->settings->C/C++->Category中选Code Generation->Use Run-time Library选Debug MultiThreaded或MultiThreaded 在创建MFC项目时, 不使用...
总的来说,SecureCRT 6.2.0 Portable作为一款网络设备console调试软件,以其丰富的功能、高度的可定制性和便携性,成为了网络管理员的得力助手。无论是日常的设备配置、故障排查还是大规模的网络运维,它都能提供...
在PHP开发过程中,调试是必不...总之,通过正确配置Eclipse和PHP环境,你可以在Console中方便地输出和查看调试信息,从而高效地进行PHP程序的调试工作。结合XDebug和其他调试工具,可以进一步提升开发效率和代码质量。
然而,在某些情况下,我们可能需要在WPF应用中使用控制台输出(Console)进行调试或者信息打印。标题“WPF控制台输出Console可隐藏可显示”指的是在WPF应用中如何管理和控制控制台窗口的可见性,即在需要时显示...
在VC++中,标准输入、输出和错误设备分别对应于控制台的不同操作,例如STD_INPUT_HANDLE代表标准输入的句柄,STD_OUTPUT_HANDLE代表标准输出的句柄,而STD_ERROR_HANDLE代表标准错误的句柄。通过这个函数,可以获取...
"ΜΑ"可能是指“Microsoft Access”,但在这个上下文中,更可能是指“MFC(Microsoft Foundation Classes)”,这是VC++中的一组库,用于简化Windows应用的开发。 连接SQL Server通常涉及以下步骤: 1. **设置...
在Unity中,"Unity界面显示Console工具"是开发者调试和追踪代码的重要辅助工具,尤其对于游戏逻辑、性能优化以及错误排查至关重要。 Unity的Console工具是一个内置的日志查看器,它能够实时显示在运行时引擎生成的...
在这个银行管理系统中,Console界面使得用户可以通过键盘输入指令,系统则在控制台上显示相应的信息和结果。这种设计简洁、直观,适合初学者理解和开发。 三、银行管理系统的核心功能 1. 账户管理:系统应能创建、...
总的来说,`Console.swc`是FLEX开发中不可或缺的调试工具,它的使用能够极大地提升开发和调试的效率,让开发者更专注于代码的逻辑和功能实现,而不是被琐碎的bug困扰。通过熟练掌握`Console.swc`,开发者可以更高效...
在给定的标题和描述中,我们关注的是一个名为"Go-qrcode2console"的项目,它允许我们将链接生成为二维码,并将其输出到控制台或者以图片的形式输出到控制台。这种功能对于开发者进行快速测试、调试或者在命令行环境...
Flex Debug调试变量输出工具是一款专为SWF应用开发者设计的强大辅助工具,尤其在解决复杂的代码逻辑和调试变量值时,它的功能显得尤为重要。这款工具能够帮助开发者轻松查看和跟踪项目中特定变量的变化,从而提高...
在输出信息过多时,`console.group()`和`console.groupEnd()`可以用来组织输出,创建可折叠的分组。例如: ```javascript console.group("动物信息"); console.log("种类: 狗"); console.log("颜色: 黄色"); console...
"Unity Log调试工具 SRDebugger - Console Tools On-Device"是一款专门针对Unity开发的插件,它允许开发者在真实设备上查看和控制游戏的日志输出,从而极大地提升了移动端项目的调试效率。 SRDebugger这款插件的...
在VC++环境中进行Windows编程,主要是利用Microsoft的Visual Studio开发工具,它提供了强大的集成开发环境(IDE)来创建Windows应用程序。对于初学者来说,学习如何在Windows上进行可视化编程是理解计算机图形用户...
本教程将帮助你理解如何在VC++中设置项目、编写C语言代码、编译和调试程序。 【描述】提到"C语言在VC++中如何使用",这意味着教程将涵盖以下内容: 1. **环境配置**:首先,你需要安装VC++6.0,这是一个经典版本,...
- **"VC98"**:这个目录很可能是VC++6.0的主要程序文件所在,包括编译器、链接器、调试器和其他开发工具。例如,`VC98\BIN`可能包含编译器和相关工具,`VC98\MFC`可能包含MFC库的头文件和库文件,`VC98\INCLUDE`和`...