首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

printf, TRACE, OutputDebugString有什么区别?该如何解决

2013-06-19 
printf, TRACE, OutputDebugString有什么区别?在vs2008下F5跑程序,如果printf, TRACE, OutputDebugString

printf, TRACE, OutputDebugString有什么区别?
在vs2008下F5跑程序,如果printf, TRACE, OutputDebugString大量使用这些东西的话,
要写文字到调试器里面,会很慢.
像TRACE的话,Release版,直接运行Ctrl + F5,则不会写文字到调试器里面.
但这个好像是mfc的,如果不想链接mfc的话,OutputDebugString是比较好的选择..
但不确定OutputDebugString是否跟TRACE一样,只有在debug下,或者在vs2008下才会写文字到调试器里面..
如果直接运行程序的话,是不是就跳过这些代码了.
[解决办法]
TRACE是OutputDebugString的封装,如果定义了_DEBUG才Output,而如果直接调用OutputDebugString,无论如何都会调用,但是进入这个函数后,他会判断程序是否在调试状态,如果是,就和调试器通信输出字符,如果不是,就什么也不做直接返回.还有更复杂的情况就不讨论了.
printf是进程内的,OutputDebugString涉及进程间的通信.
[解决办法]
OutputDebugString是把Log达到DebugView,不管什么版本都可以显示,一般Driver等会用这个方式来分析问题等
[解决办法]
printf很慢,console输出都涉及到与smss.exe的通讯,这是个LPC通讯并且是同步操作,会影响线程的执行
debug版本的TRACE是对OutputDebugString的封装,写入系统的调试输出缓冲区,只是TRACE在release中被屏蔽

热点排行