⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfxdebug.h

📁 DirectInput的基本实现 只是基本应用
💻 H
字号:
// vfxdebug.cpp
// 
// VictoryCore Code
// debuging and memory manager
//
// Author : lanzhengpeng(兰征鹏)
// More author :
// Create time : 2002-6-13
// Modify time : 2002-6-23
//-----------------------------------------------------------------------------
#ifndef __VFX_DEBUG_H__
#define __VFX_DEBUG_H__

#pragma once

#	define vT(x)	x

#ifndef _DBG_WIDE
#	if __CPL_FULL_VER < 14000000
#		define __DBG_WIDE(_String)	_String
#	else
#		define __DBG_WIDE(_String)	L##_String
#	endif
#	define _DBG_WIDE(String)	__DBG_WIDE(String)
#endif

#ifndef _MFC
#	ifndef ASSERT
#		include <cassert>
#		define ASSERT assert
#	endif
#	if _DEBUG
#		if !defined(THIS_FILE)
#			define THIS_FILE				__FILE__
#		endif
#		if !defined(TRACE)
#			define TRACE					_vfxTrace
#		endif
#		if !defined(VERIFY)
#			define VERIFY(f)				ASSERT(f)
#		endif
#		if !defined(ASSERT_VALID)
#			define ASSERT_VALID(p)			_vfxAssertValid(p,_DBG_WIDE(__FILE__),__LINE__)
#		endif
#		if !defined(ASSERT_THIS)
#			define ASSERT_THIS(p)			_vfxAssertThis(p,_DBG_WIDE(__FILE__),__LINE__)
#		endif
#		if !defined(TRACE0)
#			define TRACE0(sz)              _vfxTrace(sz)
#		endif
#		if !defined(TRACE1)
#			define TRACE1(sz, p1)          _vfxTrace(sz, p1)
#		endif
#		if !defined(TRACE2)
#			define TRACE2(sz, p1, p2)      _vfxTrace(sz, p1, p2)
#		endif
#		if !defined(TRACE3)
#			define TRACE3(sz, p1, p2, p3)  _vfxTrace(sz, p1, p2, p3)
#		endif
#	else   // _DEBUG
#		if !defined(VERIFY)
#			define VERIFY(f)				((void)(f))
#		endif
#		if !defined(ASSERT_VALID)
#			define ASSERT_VALID(pOb)		((void)0)
#		endif
#		if !defined(ASSERT_THIS)
#			define ASSERT_THISD(p)			((void)0)
#		endif
#		if !defined(TRACE)
#			define TRACE					_vfxTrace
#		endif
#		if !defined(TRACE0)
#			define TRACE0(sz)
#		endif
#		if !defined(TRACE1)
#			define TRACE1(sz, p1)
#		endif
#		if !defined(TRACE2)
#			define TRACE2(sz, p1, p2)
#		endif
#		if !defined(TRACE3)
#			define TRACE3(sz, p1, p2, p3)
#		endif
#	endif // !_DEBUG

#	if !defined(UNUSED)
#		define UNUSED(x)
#	endif

#endif //end _MFC

#	ifndef _NOVNEW

#		define _vfx_New		_vfxMemoryNew
#		define _vfx_Delete	_vfxMemoryDelete

#		include <new>

#		undef new
#		if _DEBUG
#			define VFX_DEBUG_MEMORY		1
#		else
#			undef VFX_DEBUG_MEMORY
//#			define VFX_DEBUG_MEMORY		1
#	endif

void * _vfx_New(size_t nSize,const char * file,unsigned int line);
void _vfx_Delete(void * memory,const char * file,unsigned int line);
void * _vfxMemoryNew(size_t size,const char * file,unsigned int line);

#		ifdef VFX_DEBUG_MEMORY

	inline void * _cdecl operator new (size_t nSize,const char * pFileName,int dwLine)
	{	return _vfx_New(nSize,pFileName,dwLine); }
	inline void * _cdecl operator new (size_t nSize,std::nothrow_t,const char * pFileName,int dwLine)
	{	return _vfx_New(nSize,pFileName,dwLine); }
	inline void _cdecl operator delete (void * pMem,const char * pFileName,int dwLine)
	{	_vfx_Delete(pMem,pFileName,dwLine); }

	inline void * _cdecl operator new [] (size_t nSize,const char * pFileName,int dwLine)
	{	return _vfx_New(nSize,pFileName,dwLine); }
	inline void * _cdecl operator new [] (size_t nSize,std::nothrow_t,const char * pFileName,int dwLine)
	{	return _vfx_New(nSize,pFileName,dwLine); }
	inline void _cdecl operator delete [] (void * pMem,const char * pFileName,int dwLine)
	{ 	_vfx_Delete(pMem,pFileName,dwLine); }

	inline void * _cdecl operator new (size_t nSize)
	{	return _vfx_New(nSize,0,0); }
	inline void * _cdecl operator new (size_t nSize,std::nothrow_t)
	{	return _vfxMemoryNew(nSize,0,0); }
	inline void _cdecl operator delete (void * pMem)
	{	_vfx_Delete(pMem,0,0); }

	inline void * _cdecl operator new [] (size_t nSize)
	{	return _vfx_New(nSize,0,0); }
	inline void * _cdecl operator new [] (size_t nSize,std::nothrow_t)
	{ 	return _vfxMemoryNew(nSize,0,0); }
	inline void _cdecl operator delete [] (void * pMem)
	{	_vfx_Delete(pMem,0,0); }	

#		else

	inline void * _cdecl operator new (size_t nSize)
	{	return _vfx_New(nSize,0,0); }
	inline void * _cdecl operator new (size_t nSize,std::nothrow_t)
	{	return _vfxMemoryNew(nSize,0,0); }
	inline void _cdecl operator delete (void * pMem)
	{	_vfx_Delete(pMem,0,0); }	

	inline void * _cdecl operator new [] (size_t nSize)
	{ 	return _vfx_New(nSize,0,0); }
	inline void * _cdecl operator new [] (size_t nSize,std::nothrow_t)
	{ 	return _vfxMemoryNew(nSize,0,0); }
	inline void _cdecl operator delete [] (void * pMem)
	{	_vfx_Delete(pMem,0,0); }	
	
#		endif //end VFX_DEBUG_MEMORY

#		if VFX_DEBUG_MEMORY
#			define VNEW new(__FILE__,__LINE__)
#			define VNEW_NOTHROW new(std::nothrow,__FILE__,__LINE__)
#		else
#			define VNEW new
#			define VNEW_NOTHROW new(std::nothrow)
#		endif	//end VFX_DEBUG_MEMORY
#	else
#		define VNEW new
#		define VNEW_NOTHROW new(std::nothrow)
#	endif //end _NOVNEW
	
#undef VFX_ASSERT
#include <cassert>
#define VFX_ASSERT assert

#undef VFX_TRACE
#define VFX_TRACE						_vfxTrace
#undef VFX_LTRACE
#define VFX_LTRACE						_vfxLevelTrace
#undef VFX_UNUSED
#define VFX_UNUSED(x)
#if _DEBUG
#	undef VFX_VERIFY
#	define VFX_VERIFY(f)				VFX_ASSERT(f)
#	undef VFX_ASSERT_VALID
#	define VFX_ASSERT_VALID(p)			_vfxAssertValid(p,_DBG_WIDE(__FILE__),__LINE__)
#	undef VFX_ASSERT_THIS
#	define VFX_ASSERT_THIS(p)			_vfxAssertThis(p,_DBG_WIDE(__FILE__),__LINE__)
#	undef VFX_TRACE0
#	define VFX_TRACE0(sz)				_vfxTrace(sz)
#	undef VFX_TRACE1
#	define VFX_TRACE1(sz,p0)			_vfxTrace(sz,p0)
#	undef VFX_TRACE2
#	define VFX_TRACE2(sz,p1,p2)			_vfxTrace(sz,p1,p2)
#	undef VFX_TRACE3
#	define VFX_TRACE3(sz,p1,p2,p3)		_vfxTrace(sz,p1,p2,p3)
#	undef VFX_TRACE4
#	define VFX_TRACE4(sz,p1,p2,p3,p4)	_vfxTrace(sz,p1,p2,p3,p4)
#else   // _DEBUG
#	undef VFX_VERIFY
#	define VFX_VERIFY(f)				((void)(f))
#	undef VFX_ASSERT_VALID
#	define VFX_ASSERT_VALID(p)			((void)0)
#	undef VFX_ASSERT_THIS
#	define VFX_ASSERT_THIS(p)			((void)0)
#	undef VFX_TRACE0
#	define VFX_TRACE0(sz)
#	undef VFX_TRACE1
#	define VFX_TRACE1(sz,p0)
#	undef VFX_TRACE2
#	define VFX_TRACE2(sz,p1,p2)
#	undef VFX_TRACE3
#	define VFX_TRACE3(sz,p1,p2,p3)
#	undef VFX_TRACE4
#	define VFX_TRACE4(sz,p1,p2,p3,p4)
#endif // !_DEBUG

//#ifndef __VFX_LOGO_FILE
//#define __VFX_LOGO_FILE		"vfxlog.txt"
//#endif

void __cdecl _vfxTraceA(LPCSTR lpszFormat, ...);
void __cdecl _vfxLevelTraceA(UINT_PTR level, LPCSTR lpszFormat, ...);
void __cdecl _vfxTraceW(LPCWSTR lpszFormat, ...);
void __cdecl _vfxLevelTraceW(UINT_PTR level, LPCWSTR lpszFormat, ...);
#ifdef UNICODE
#	define _vfxTrace		_vfxTraceW
#	define _vfxLevelTrace	_vfxLevelTraceW
#else
#	define _vfxTrace		_vfxTraceA
#	define _vfxLevelTrace	_vfxLevelTraceA
#endif

#if __CPL_FULL_VER < 14000000
BOOL _vfxAssertValid(LPVOID p,LPCSTR lpszFileName,DWORD dwLine);
BOOL _vfxAssertThis(LPVOID p,LPCSTR lpszFileName,DWORD dwLine);
#else
BOOL _vfxAssertValid(LPVOID p,LPCWSTR lpszFileName,DWORD dwLine);
BOOL _vfxAssertThis(LPVOID p,LPCWSTR lpszFileName,DWORD dwLine);
#endif

UINT_PTR _vfxGetTraceLevel();
void _vfxSetTraceLevel(UINT_PTR uLevel);
void _vfxSetTraceIO(class VFile_Base *);

inline void _vfxReportException(LPCSTR pStrResion,const EXCEPTION_RECORD & SavedExpRecord,const CONTEXT & SavedExpContext)
{
	VFX_LTRACE(5,	vT("%s\r\n")
					vT("error 0x%8.8X at 0x%8.8X\r\n"),
					pStrResion,
					SavedExpRecord.ExceptionCode,
					SavedExpRecord.ExceptionAddress);
#ifdef _WIN64
	VFX_LTRACE(5,	vT("RAX = 0x%p\r\n")
					vT("RBX = 0x%p\r\n")
					vT("RCX = 0x%p\r\n")
					vT("RDX = 0x%p\r\n")
					vT("RSI = 0x%p\r\n")
					vT("RDI = 0x%p\r\n")
					vT("RSP = 0x%p\r\n")
					vT("RBP = 0x%p\r\n")
					vT("RIP = 0x%p\r\n")
					vT("R8 = 0x%p\r\n")
					vT("R9 = 0x%p\r\n")
					vT("R10 = 0x%p\r\n")
					vT("R11 = 0x%p\r\n")
					vT("R12 = 0x%p\r\n")
					vT("R13 = 0x%p\r\n")
					vT("R14 = 0x%p\r\n")
					vT("R15 = 0x%p\r\n")
					vT("EFL = 0x%p\r\n")
					,
					SavedExpContext.Rax,
					SavedExpContext.Rbx,
					SavedExpContext.Rcx,
					SavedExpContext.Rdx,
					SavedExpContext.Rsi,
					SavedExpContext.Rdi,
					SavedExpContext.Rsp,
					SavedExpContext.Rbp,
					SavedExpContext.Rip,
					SavedExpContext.R8,
					SavedExpContext.R9,
					SavedExpContext.R10,
					SavedExpContext.R11,
					SavedExpContext.R12,
					SavedExpContext.R13,
					SavedExpContext.R14,
					SavedExpContext.R15,
					SavedExpContext.EFlags);
#else
	VFX_LTRACE(5,	vT("EAX = 0x%8.8X\r\n")
					vT("EBX = 0x%8.8X\r\n")
					vT("ECX = 0x%8.8X\r\n")
					vT("EDX = 0x%8.8X\r\n")
					vT("ESI = 0x%8.8X\r\n")
					vT("EDI = 0x%8.8X\r\n")
					vT("ESP = 0x%8.8X\r\n")
					vT("EBP = 0x%8.8X\r\n")
					vT("EIP = 0x%8.8X\r\n")
					vT("EFL = 0x%8.8X\r\n"),
					SavedExpContext.Eax,
					SavedExpContext.Ebx,
					SavedExpContext.Ecx,
					SavedExpContext.Edx,
					SavedExpContext.Esi,
					SavedExpContext.Edi,
					SavedExpContext.Esp,
					SavedExpContext.Ebp,
					SavedExpContext.Eip,
					SavedExpContext.EFlags);
#endif
}

#endif	//end __VFX_DEBUG_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -