在windows窗体程序中单独开一个dos命令行窗口,输出我们想要的信息(调试程序常用)
来源:互联网 发布:js防水涂料 速溶自粘 编辑:程序博客网 时间:2024/04/30 00:44
在写windows窗体程序的时候,特别是服务器调试,又不能断点的情况下,我们希望输出信息以供我们定位错误信息,经常的做法是输出日志,但是输出日志过大,日志文件过大,会降低服务器的性能,甚至造成卡死状态(非异步模式读写文件),因此我们可以通过从dos窗口输出程序,来达到我们的要求
class CDebugWindow{ //唯一实例private: explicit CDebugWindow(); explicit CDebugWindow(TCHAR *Title);public: static CDebugWindow& GetInstance(); static void DestroyInstance(); ~CDebugWindow(); //对外接口public:#define DbgEndl "\n" template<class T> CDebugWindow& operator<<(T info) { WriteInfo(info); return *this; }; //模板特例化 template<class T> CDebugWindow& operator<<(T* info) { WriteInfo(info); return *this; }; template<class T> CDebugWindow& operator<<(const T* info) { WriteInfo(info); return *this; };private: wstring GetTime(); HANDLE Alloc(); bool Free(); bool WriteInfo(const TCHAR *szInfo); bool WriteInfo(const char *szInfo); bool WriteInfo(float fNum); bool WriteInfo(int nNum); bool WriteInfo(long lNum); bool WriteInfo(double dNum); bool WriteInfo(__int64 llNum);private: HANDLE m_hConsole; static CDebugWindow* si_Instance; static int m_nInstanceNum;};
#include "stdafx.h"#include "DebugWindow.h"#include "ConvertChar.h"int CDebugWindow::m_nInstanceNum = 0;CDebugWindow* CDebugWindow::si_Instance = NULL;CDebugWindow::CDebugWindow(){ Alloc(); ::SetConsoleTitle(TEXT("调试窗口"));}CDebugWindow::CDebugWindow(TCHAR *Title){ Alloc(); ::SetConsoleTitle(TEXT("Title"));}CDebugWindow& CDebugWindow::GetInstance(){ if (!m_nInstanceNum) { si_Instance = new CDebugWindow(); ++m_nInstanceNum; return *si_Instance; } else { ++m_nInstanceNum; return *si_Instance; }}void CDebugWindow::DestroyInstance(){ if (--m_nInstanceNum) { delete si_Instance; }}CDebugWindow::~CDebugWindow(){ Free();}HANDLE CDebugWindow::Alloc(){ if (::AllocConsole()) { m_hConsole = ::GetStdHandle(STD_OUTPUT_HANDLE); return m_hConsole; } return NULL;}bool CDebugWindow::Free(){ return ::FreeConsole();}bool CDebugWindow::WriteInfo(const TCHAR *szInfo){ DWORD nNumWritten = 0; std::wstring szBuf = szInfo; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}bool CDebugWindow::WriteInfo(const char *szInfo){ DWORD nNumWritten = 0; WCHAR szTemp[255] = L""; CConvertChar::AnsiToUnicode(szTemp, szInfo); std::wstring szBuf = szTemp; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}bool CDebugWindow::WriteInfo(int nNum){ DWORD nNumWritten = 0; TCHAR szInfo[16]; swprintf(szInfo, 16 ,TEXT("%d"), nNum); std::wstring szBuf = szInfo; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}bool CDebugWindow::WriteInfo(long lNum){ DWORD nNumWritten = 0; TCHAR szInfo[16]; swprintf(szInfo,16 ,TEXT("%ld"), lNum); std::wstring szBuf = szInfo; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}bool CDebugWindow::WriteInfo(float fNum){ DWORD nNumWritten = 0; TCHAR szInfo[16]; swprintf(szInfo, 16,TEXT("%f"), fNum); std::wstring szBuf = szInfo; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}bool CDebugWindow::WriteInfo(double dNum){ DWORD nNumWritten = 0; TCHAR szInfo[16]; swprintf(szInfo,16,TEXT("%lf"), dNum); std::wstring szBuf = szInfo; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}bool CDebugWindow::WriteInfo(__int64 llNum){ DWORD nNumWritten = 0; TCHAR szInfo[16]; swprintf(szInfo, 16, TEXT("%I64d"), llNum); std::wstring szBuf = szInfo; return ::WriteConsole(m_hConsole, szBuf.data(), szBuf.size(), &nNumWritten, NULL);}wstring CDebugWindow::GetTime(){ time_t timeStamp = time(NULL); tm curTime; localtime_s(&curTime,&timeStamp); TCHAR szBuf[64] = TEXT(""); wcsftime(szBuf, 64, TEXT("[%Y-%m-%d %H:%M:%S] "), &curTime); return wstring(szBuf);}
阅读全文
0 0
- 在windows窗体程序中单独开一个dos命令行窗口,输出我们想要的信息(调试程序常用)
- 解决程序编码格式正确,cmd命令行(DOS窗口)输出不正确的问题
- 在Win32程序中显示Dos调试窗口
- 在Win32程序中显示Dos调试窗口
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
- win32/vc 程序调试信息命令行输出
- 在MFC程序中,加入一个cpp文件,如果想要打印输出信息的话,用这个语句最便捷
- mfc 在窗体程序里面输出字符串既是:在窗口程序里面想输出在调试的时候会出现什么样的问
- windows窗口程序输出printf打印信息
- 带dos调试窗口的win32程序
- 带dos调试窗口的win32程序
- win32程序中创建一个DOS窗口
- 一个可以用于输出信息的窗口程序
- linux驱动优化重构提高效率的心得
- servlet的web.xml的配置信息
- [模拟赛]11.5
- 21岁会计女孩,INFP职业规划:我被一场旅行给毁了。
- Oracle之分区表和普通表的查询执行计划对比
- 在windows窗体程序中单独开一个dos命令行窗口,输出我们想要的信息(调试程序常用)
- Java面向对象(重写和重载)学习笔记1
- malloc & 悬空指针
- 11-5-17周总结
- 2017
- Linux下开发-权限详解
- SSH免密码登录
- HDOJ 1237 简单计算器
- 设计模式-装饰者模式