C++中实现MFC风格的TRACE

原文地址: 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,编译不错错,但是会导致无法正确格式化数据,堆栈的地址也不对,可能导致崩溃。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。