受欢迎的博客标签

c++ 在Release版本中实现TRACE输出信息记录到文件功能

Published

TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量.相当于:

#ifdef _DEBUG 
 AfxDump<<"string in trace ...\n"; 
#endif 

使用格式如下:

TRACE("DDDDDDDDDDD"); 
TRACE("wewe%d",333); 

MFC中常见到以下代码段:

{
	TRACE0("未能创建菜单栏\n");
	return -1;      // 未能创建
}

TRACE为调试宏,仅在Debug模式下有效,调试运行时可在输出窗口打印调试信息。

定义位置:X:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\afx.h

 

在Release版本中不支持TRACE打印信息。所以在Release中需要自己实现TRACE,由于在VC6.0中不支持宏传递可变参数,所以编写函数实现TRACE;

1. 在stdafx.cpp中编写函数实现TRACE功能;

CStdioFile gDbFile;

void __cdecl db_print(const char *lpszFormat,...)
{
#ifdef REL_PRINT
#ifdef NDEBUG
int nBuf;
char szBuffer[512];
memset(szBuffer,0,512); 
va_list args;
va_start(args,lpszFormat);

nBuf = _vsnprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);

gDbFile.WriteString(szBuffer);
va_end(args);
#endif
#endif
}

这个函数就是把打印信息写到文件中;

2. 在stdafx.h中声明一下:

extern CStdioFile gDbFile;


#define REL_PRINT
void __cdecl db_print(const char *lpszFormat,...);


#ifdef NDEBUG
#define TRACE db_print
#endif

 

3. 在应用程序类中的InitInstance()中创建这个文件;

gDbFile.Open("C:\\XXX_Debug.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::shareDenyNone);

在ExitInstance() 中关闭文件:

gDbFile.Close();

通过以上操作,在release中TRACE可以打印信息到文件中。

通过是否定义 REL_PRINT来关闭release中的打印功能。