原文地址: https://www.cnblogs.com/lidabo/archive/2012/12/28/2837545.html
原文地址: https://www.cnblogs.com/shaoxuejun/p/5889616.html
我们知道,MFC中可以调用宏TRACE等十分方便的输出调试信息到Visual Studio输出窗口,但C++中没人类似的函数,最近我在开发一个小程序时跟踪了一下MFC的TRACE宏,发现它映像了atltrace.h中的ATLTRACE宏,因些,我们也想在C++中使用TRace可以用如下方式:
#include <atltrace.h>
#define TRACE ATLTRACE
TRACE("");
在C++中可以直接使用下面的函数:
#include <Windows.h>
#ifdef _DEBUG
void myTrace(const char *format, ...)
{
char msg[1024] = { 0 };
va_list pArgList;
va_start(pArgList, format);
vsprintf_s(msg, format, pArgList);
va_end(pArgList);
OutputDebugStringA(msg);
}
#define TRACE myTrace
#else
#define TRACE
#endif
关键点:字符串格式化必须使用“vsprintf_s”,而不能使用“sprintf_s",“sprintf_s"的第三个参数是”...“,而不是va_list,编译不错错,但是会导致无法正确格式化数据,堆栈的地址也不对,可能导致崩溃。