鉴于某某心情不佳,发点东西出来,让大家批一下吧,
DebugX.h
/***********************************************************************
版权所有:choday
文件名称:XDebug.h
描 述:
作 者:choday
创建日期:2011-10-17 17:09:16
修 改 人:choday
修改日期:
修改原因:
***********************************************************************/
#pragma once
#include <tchar.h>
#include <stdio.h>
#include <crtdbg.h>
//#define DEBUG_TO_FILE _T("debug.txt")
//#define DEBUG_TO_CONSOLE
namespace XLIB
{
BOOL PrintIP( DWORD ip );
BOOL PrintfSockAddr( const SOCKADDR* paddr );
#ifdef DEBUG_TO_FILE
#define XInitDebug(){_tfreopen( DEBUG_TO_FILE,_T("a+t"),stdout);}
#define XDebugOut fflush(stdout);_tprintf
#define XDebugOutIP XLIB::PrintIP
#define XDebugOutSockAddr XLIB::PrintfSockAddr
#define XCloseDebug() fflush(stdout);
#else
#ifdef DEBUG_TO_CONSOLE
#define XInitDebug() {AllocConsole();freopen("CONOUT$","w+t",stdout);freopen("CONIN$","r+t",stdin);}
#define XDebugOut _tprintf
#define XDebugOutIP XLIB::PrintIP
#define XDebugOutSockAddr XLIB::PrintfSockAddr
#define XCloseDebug FreeConsole
#endif
#endif
#ifndef XInitDebug
#define XInitDebug() ;
#define XDebugOutIP(a) ;
#define XDebugOutSockAddr(a) ;
#define XDebugOut ;
#define XCloseDebug() ;
#endif
class CXMessageLog
{
public:
typedef enum
{
MESSAGE_TO_CONSOLE,
MESSAGE_TO_FILE,
MESSAGE_TO_DEBUGER,
}MESSAGE_TO;
CXMessageLog( MESSAGE_TO to,BOOL AddTime = FALSE,LPCTSTR lpFile = 0);
CXMessageLog();
~CXMessageLog();
BOOL Init( MESSAGE_TO to,BOOL AddTime = FALSE,LPCTSTR lpFile = 0);
VOID UnInit();
VOID _cdecl MessageOut( LPCTSTR lpformat,... );
private:
MESSAGE_TO m_Messageto;
TCHAR m_lpFileName[MAX_PATH];
BOOL m_bInited;
BOOL m_AddTime;
};
/////////////////////////////////////////////////////////////////////////////////////
//
#ifndef ASSERT
#ifdef _DEBUG
#define ASSERT(expr) _ASSERTE(expr)
#else
#define ASSERT(expr)
#endif
#endif
#ifdef _DEBUG
#ifndef TRACE
#define TRACE __Trace
#endif
#else
#ifndef TRACE
#define TRACE
#endif
#endif
void X__Trace(LPCTSTR pstrFormat, ...);
/////////////////////////////////////////////////////////////////////////////////////
}
DebugX.cpp
/***********************************************************************
版权所有:choday
文件名称:XDebug.cpp
描 述:
作 者:choday
创建日期:2011-10-17 17:03:37
修 改 人:choday
修改日期:
修改原因:
***********************************************************************/
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include "Debugx.h"
namespace XLIB
{
CXMessageLog::CXMessageLog()
{
m_bInited = FALSE;
m_AddTime = FALSE;
ZeroMemory( m_lpFileName,sizeof(m_lpFileName) );
}
CXMessageLog::~CXMessageLog()
{
UnInit();
}
CXMessageLog::CXMessageLog(MESSAGE_TO to,BOOL AddTime,LPCTSTR lpFile )
{
ZeroMemory( m_lpFileName,sizeof(m_lpFileName) );
Init( to,AddTime,lpFile );
}
BOOL CXMessageLog::Init(MESSAGE_TO to,BOOL AddTime,LPCTSTR lpFile )
{
m_Messageto = to;
lstrcpy( m_lpFileName,lpFile );
m_AddTime = AddTime;
if( MESSAGE_TO_FILE == to)
{
_tfreopen( lpFile,_T("a+t"),stdout);
}
if( MESSAGE_TO_CONSOLE == to )
{
AllocConsole();
freopen("CONOUT$","w+t",stdout);
//freopen("CONIN$","r+t",stdin);
}
m_bInited = TRUE;
return TRUE;
}
VOID CXMessageLog::UnInit()
{
if( MESSAGE_TO_CONSOLE == m_Messageto)FreeConsole();
}
VOID _cdecl CXMessageLog::MessageOut( LPCTSTR lpformat,... )
{
va_list args;
int n;
TCHAR sprint_buf[1024];
TCHAR strTime[40] = {0};
SYSTEMTIME system = {0};
if( FALSE == m_bInited )return;
va_start(args, lpformat);
n = _vstprintf(sprint_buf, lpformat, args);
va_end(args);
switch( m_Messageto )
{
case MESSAGE_TO_FILE:
case MESSAGE_TO_CONSOLE:
if( m_AddTime )
{
GetLocalTime( &system );
wsprintf( strTime,_T("%04d-%02d-%02d %02d:%02d:%02d.%03d\t"),system.wYear,system.wMonth,system.wDay,
system.wHour,system.wMinute,system.wSecond,system.wMilliseconds );
_tprintf( strTime );
}
_tprintf( sprint_buf );
fflush(stdout);
break;
case MESSAGE_TO_DEBUGER:
OutputDebugString(sprint_buf);
break;
}
}
void X__Trace(LPCTSTR pstrFormat, ...)
{
#ifdef _DEBUG
TCHAR szBuffer[300] = { 0 };
va_list args;
va_start(args, pstrFormat);
_vstprintf(szBuffer, pstrFormat, args);
va_end(args);
::OutputDebugString(szBuffer);
#endif
}
BOOL PrintIP( DWORD ip )
{
LPBYTE lpIP = (LPBYTE)&ip;
_tprintf( _T("%d.%d.%d.%d"),lpIP[0],lpIP[1],lpIP[2],lpIP[3]);
return TRUE;
}
BOOL PrintfSockAddr( const SOCKADDR* p )
{
sockaddr_in* paddr=(sockaddr_in*)p;
_tprintf( _T("%d.%d.%d.%d:%d"),paddr->sin_addr.S_un.S_un_b.s_b1,
paddr->sin_addr.S_un.S_un_b.s_b2,
paddr->sin_addr.S_un.S_un_b.s_b3,
paddr->sin_addr.S_un.S_un_b.s_b4,
htons(paddr->sin_port) );
return TRUE;
}
}
依懒winsock2.h
用法
#define DEBUG_TO_FILE _T("debug.txt") //输出到文件,不定义的话,关闭输出
#include "Debugx.h"
或者
#define DEBUG_TO_CONSOLE 输出到命令行
#include "Debugx.h"
程序入口处调用
XInitDebug() 创建命令行,或者...
输出格式化信息
XDebugOut( _T("id=%d\n"),1 );
输出 sockaddr
sockaddr addr;
XDebugOutSockAddr(&addr);
输出ipv4
DWORD ipv4
XDebugOutIP(ipv4);//ipv6自己搞
[课程]FART 脱壳王!加量不加价!FART作者讲授!