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中的打印功能。