在MFC C++ (Visual Studio6)中,我习惯于使用跟踪宏来进行调试。对于普通的win32,有没有等价的语句?
发布于 2009-01-16 20:35:28
_RPTn工作得很好,尽管不是很方便。将MFC TRACE语句重新创建为允许可变数目参数的函数的Here is some code。还添加了TraceEx宏,该宏预置了源文件和行号,以便您可以单击返回到语句所在的位置。
更新: CodeGuru上的原始代码不能在发布模式下为我编译,所以我更改了在发布模式下删除跟踪语句的方式。这是我放到Trace.h中的完整源代码。感谢Thomas Rizos的原版
// TRACE macro for win32
#ifndef __TRACE_H__850CE873
#define __TRACE_H__850CE873
#include <crtdbg.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#ifdef _DEBUG
#define TRACEMAXSTRING 1024
char szBuffer[TRACEMAXSTRING];
inline void TRACE(const char* format,...)
{
va_list args;
va_start(args,format);
int nBuf;
nBuf = _vsnprintf(szBuffer,
TRACEMAXSTRING,
format,
args);
va_end(args);
_RPT0(_CRT_WARN,szBuffer);
}
#define TRACEF _snprintf(szBuffer,TRACEMAXSTRING,"%s(%d): ", \
&strrchr(__FILE__,'\\')[1],__LINE__); \
_RPT0(_CRT_WARN,szBuffer); \
TRACE
#else
// Remove for release mode
#define TRACE ((void)0)
#define TRACEF ((void)0)
#endif
#endif // __TRACE_H__850CE873发布于 2009-01-16 20:05:38
在msdn文档中,Macros for Reporting
您可以使用CRTDBG.H中定义的_RPTn和_RPTFn宏来代替使用
语句进行调试。当没有定义_DEBUG时,这些宏在您的发布版本中自动消失,因此没有必要将它们包含在#ifdefs.
中
发布于 2009-01-16 22:16:14
还有OutputDebugString。但是,在编译发行版时不会将其删除。
https://stackoverflow.com/questions/451749
复制相似问题