文档章节

使用OutputDebugString替换掉TRACE

seanking
 seanking
发布于 2016/02/16 12:00
字数 304
阅读 31
收藏 0

使用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窗口中自由输出测试信息了


© 著作权归作者所有

共有 人打赏支持
seanking
粉丝 3
博文 14
码字总数 5960
作品 0
杭州
高级程序员
私信 提问
VC调试时输出调试信息到Debug窗口

TRACE宏(afx.h, AfxTrace) (TRACE将信息输出到afxDump对象,只在_DEBUG定义时输出,最多输出512个字符,格式化与printf类似) afxDump对象(afx.h, CDumpContext) (afxDump调用OutputDebugString...

simpower
07/18
0
0
TRACE宏的使用方法

TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量。 使...

长平狐
2012/10/08
110
0
liudegui/log4cplus

#log4cplus 基于log4cplus修改 修改内容: 只支持Windows和Linux平台,去掉其他平台的支持(vs2010和gcc4.4测试通过)。 去除unicode的支持 只保留consoleAppender、fileAppender;并添加cus...

liudegui
2014/08/18
0
0
error C2664: 'OutputDebugStringW' : cannot conv...

错误信息:error C2664: 'OutputDebugStringW' : cannot convert parameter 1 from 'char [100]' to 'LPCWSTR' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, ......

稀饭桶子
2013/03/07
0
0
译:理解 Win32 "OutputDebugString"

坚定的 Win32 开发人员可能对 OutputDebugString() API 函数比较熟悉,它可以使你的程序和调试器进行交谈。它要比创建日志文件容易,而且所有“真正的”调试器都能使用它。应用程序和调试器交...

AlphaJay
2010/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么只有你每次提交代码,log里面会出现merge

http://www.cnblogs.com/Sinte-Beuve/p/9195018.html

踏破铁鞋无觅处
2分钟前
0
0
如何学习大数据:spark发布程序

一、对于spark程序只是用于默认的spark包的情况 直接点击pcakage 将程序进行在linux当中进行发布 客户端模式:测试 spark-submit --class com.keduox.App \ --master yarn \ --deploy-mode ...

架构师springboot
2分钟前
0
0
oracle job(定时任务)

创建 定时任务 job declare job number;BEGIN DBMS_JOB.SUBMIT( JOB => job, -- job任务的唯一标识(自动生成) WHAT => 'INSERT into TEXTL (id) VALUES(TEXT......

骑羊放狼灬
6分钟前
0
0
Spring声明式事务在抛出异常时不回滚(RollBack)

Spring声明式事务默认只在RuntimeException时Rollback(回滚),不当的try catch会导致事务不回滚。 spring事务默认运行时异常回滚,RuntimeException 配置时添加异常回滚 rollback-for="Th...

叶落花开
7分钟前
0
0
赋能时空云计算 阿里云数据库时空引擎Ganos上线

随着移动互联网、位置感知技术、对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业。从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像...

阿里云云栖社区
9分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部