1、输出宏和函数
①使用TRACE,其语法类似printf,用于向Output窗口输出信息。该宏仅仅在程序的Debug版本中出现,在release版本中无效。
②使用printf时,在Debug和Release版本下都会输出信息。
③使用TRACE和printf时,既可以输出字符串,也可以输出格式化信息,如(以TRACE为例)
TRACE(_T("This is a test\n"));
TRACE(_T("This is NO.%d test\n"), cnt);
④使用OutputDebugString输出字符串信息,其函数原型如下:
VOID OutputDebugString(LPCTSTR lpOutputString); // lpOutputString: pointer to string to be displayed
该函数在Debug和Release版本中都有效,但是只能输出字符串,如果想输出变量值,需要自己先格式化。例如:
CString str;
str.Format(_T("This is NO.%d test\n"), cnt);
OutputDebugString(str);
⑤在Windows CE下,还可以使用RETAILMSG宏来输出格式化信息。如下所示:
RETAILMSG(TRUE, (_T("This is NO.%d test\n"), cnt));
2、查看输出的调试信息
对于Debug版本的程序,通常是在VC IDE环境中运行,因此这时可以直接通过IDE的Output窗口来查看输出的调试信息。
对于Release版本的程序,可以通过DebugView工具来查看系统DEBUGER中的调试信息,这时不要在IDE环境中运行程序,需要直接运行.exe文件。这个工具在网上可以下载。
对于Windows CE下的Release版本程序,可以通过串口线将其调试串口接到电脑上,然后在DNW软件中查看输出信息。
最后,还想提一下另外两个很有用的宏:ASSERT和VERIFY。前者只在Debug下有效,后者在Debug和Release都有效。通常ASSERT用的比较多,但是需要注意两点:
第一,是在条件为假时输出诊断信息;
第二,由于ASSERT只在Debug版本下有效,因此千万别在其条件中执行函数,我曾经就犯过错。如
ASSERT( func() == 3);
这条语句是执行func()函数,同时判断其返回值是否是3,如果不是3说明程序有错,则输出诊断信息。在Debug下一切正常,但是在Release下,由于ASSERT无效,导致func()函数没有执行。