使用OutputDebugString替换掉TRACE
博客专区 > seanking 的博客 > 博客详情
使用OutputDebugString替换掉TRACE
seanking 发表于2年前
使用OutputDebugString替换掉TRACE
  • 发表于 2年前
  • 阅读 23
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: OutputDebugString的优势

使用TRACE调试很方便,但是在Unicode环境下确老是问题多多,经常会出现令人郁闷的识别问题。

_CrtDbgReport: String too long or IO Error

虽然可以通过setlocale函数来设置语言页,但是仅支持一种语言,如果需要同时显示多种语言就很令人无语。,此外TRACE有最大输出长度的限制(1K)

class XCLILocale
{
public:
	XCLILocale(void)
	{	m_strLocale = _tsetlocale(LC_ALL,_T(""));	}

	virtual ~XCLILocale(void)
	{	_tsetlocale(LC_ALL,m_strLocale);	}
public:
	LPCTSTR m_strLocale;
};
void main(void)
{
    XCLILocale locale;
    TRACE(_T("测试Test\n"));
}

Windows提供了一个API函数OutputDebugString用来向output窗口输出信息,该函数有OutputDebugStringW (Unicode) and OutputDebugStringA (ANSI)两个版本。

字符串长度无限制(至少我输出了一个约25K的XML文件就没啥问题,用TRACE最多显示一部分)。

不过使用OutputDebugString函数不支持printf 风格的格式化。需要预先格式化字符串。不过可以用CString类的FormatV函数封装一下,封装代码如下:

void __cdecl XTrace(LPCTSTR strFormat, ...)
	{
		va_list argList;
		va_start(argList, strFormat);

		CString str;
		str.FormatV(strFormat,argList);

		va_end(argList);

		OutputDebugString(str);
	}

至此,使用XTrace函数终于可以替代TRACE宏,在output窗口中自由输出测试信息了


标签: OutputDebugString
共有 人打赏支持
粉丝 3
博文 12
码字总数 5369
评论 (0)
×
seanking
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: