`
Fangrn
  • 浏览: 818440 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

VC++ 中用来调试和输出 console 信息的工具

    博客分类:
  • vc++
 
阅读更多

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 利用控制台输出调试信息

    ### MFC中利用控制台输出调试信息 在开发大型软件项目时,特别是在使用Microsoft Foundation Classes (MFC)框架的情况下,调试复杂的应用程序是一项极具挑战性的任务。尤其对于那些运行时间较长的程序而言,了解...

    VC++常见安装调试错误

    VC调试常见错误 程序设计到多线程,VC++6.0默认设置可作以下修改: project-&gt;settings-&gt;C/C++-&gt;Category中选Code Generation-&gt;Use Run-time Library选Debug MultiThreaded或MultiThreaded 在创建MFC项目时, 不使用...

    网络设备console调试软件SecureCRT-6.2.0-Portable(交换机、路由器)

    总的来说,SecureCRT 6.2.0 Portable作为一款网络设备console调试软件,以其丰富的功能、高度的可定制性和便携性,成为了网络管理员的得力助手。无论是日常的设备配置、故障排查还是大规模的网络运维,它都能提供...

    php在eclipse的控制台console输出调试信息功能实现

    在PHP开发过程中,调试是必不...总之,通过正确配置Eclipse和PHP环境,你可以在Console中方便地输出和查看调试信息,从而高效地进行PHP程序的调试工作。结合XDebug和其他调试工具,可以进一步提升开发效率和代码质量。

    WPF控制台输出Console可隐藏可显示

    然而,在某些情况下,我们可能需要在WPF应用中使用控制台输出(Console)进行调试或者信息打印。标题“WPF控制台输出Console可隐藏可显示”指的是在WPF应用中如何管理和控制控制台窗口的可见性,即在需要时显示...

    用VC++实现console程序显示彩色文本

    在VC++中,标准输入、输出和错误设备分别对应于控制台的不同操作,例如STD_INPUT_HANDLE代表标准输入的句柄,STD_OUTPUT_HANDLE代表标准输出的句柄,而STD_ERROR_HANDLE代表标准错误的句柄。通过这个函数,可以获取...

    VC++(Console) 连接SQL

    "ΜΑ"可能是指“Microsoft Access”,但在这个上下文中,更可能是指“MFC(Microsoft Foundation Classes)”,这是VC++中的一组库,用于简化Windows应用的开发。 连接SQL Server通常涉及以下步骤: 1. **设置...

    Unity界面显示Console工具

    在Unity中,"Unity界面显示Console工具"是开发者调试和追踪代码的重要辅助工具,尤其对于游戏逻辑、性能优化以及错误排查至关重要。 Unity的Console工具是一个内置的日志查看器,它能够实时显示在运行时引擎生成的...

    银行管理系统VC++版本,console界面

    在这个银行管理系统中,Console界面使得用户可以通过键盘输入指令,系统则在控制台上显示相应的信息和结果。这种设计简洁、直观,适合初学者理解和开发。 三、银行管理系统的核心功能 1. 账户管理:系统应能创建、...

    FLEX调试工具Console.swc

    总的来说,`Console.swc`是FLEX开发中不可或缺的调试工具,它的使用能够极大地提升开发和调试的效率,让开发者更专注于代码的逻辑和功能实现,而不是被琐碎的bug困扰。通过熟练掌握`Console.swc`,开发者可以更高效...

    Go-qrcode2console链接生成二维码输出到console或者是二维码图片输出到console

    在给定的标题和描述中,我们关注的是一个名为"Go-qrcode2console"的项目,它允许我们将链接生成为二维码,并将其输出到控制台或者以图片的形式输出到控制台。这种功能对于开发者进行快速测试、调试或者在命令行环境...

    flex debug调试变量输出工具

    Flex Debug调试变量输出工具是一款专为SWF应用开发者设计的强大辅助工具,尤其在解决复杂的代码逻辑和调试变量值时,它的功能显得尤为重要。这款工具能够帮助开发者轻松查看和跟踪项目中特定变量的变化,从而提高...

    JS调试-Console命令详解

    在输出信息过多时,`console.group()`和`console.groupEnd()`可以用来组织输出,创建可折叠的分组。例如: ```javascript console.group("动物信息"); console.log("种类: 狗"); console.log("颜色: 黄色"); console...

    Unity Log调试工具 SRDebugger - Console Tools On-Device

    "Unity Log调试工具 SRDebugger - Console Tools On-Device"是一款专门针对Unity开发的插件,它允许开发者在真实设备上查看和控制游戏的日志输出,从而极大地提升了移动端项目的调试效率。 SRDebugger这款插件的...

    VC++windows编程可视化初学输出文本

    在VC++环境中进行Windows编程,主要是利用Microsoft的Visual Studio开发工具,它提供了强大的集成开发环境(IDE)来创建Windows应用程序。对于初学者来说,学习如何在Windows上进行可视化编程是理解计算机图形用户...

    VC++快速学习C语言

    本教程将帮助你理解如何在VC++中设置项目、编写C语言代码、编译和调试程序。 【描述】提到"C语言在VC++中如何使用",这意味着教程将涵盖以下内容: 1. **环境配置**:首先,你需要安装VC++6.0,这是一个经典版本,...

    vc++6.0开发工具

    - **"VC98"**:这个目录很可能是VC++6.0的主要程序文件所在,包括编译器、链接器、调试器和其他开发工具。例如,`VC98\BIN`可能包含编译器和相关工具,`VC98\MFC`可能包含MFC库的头文件和库文件,`VC98\INCLUDE`和`...

Global site tag (gtag.js) - Google Analytics