Posted on 2007-03-13 18:04
vcommon 阅读(8015)
评论(0) 编辑 收藏 引用
从OutputDebugString的泥潭撤退
曾几何时,非常习惯使用OutputDebugString和DbgView去查找问题,然而大量的log让人眼花缭乱.
OutputDebugString介绍:
OutputDebugString在每次调用时会使进程切换进程上下文.
WaitForDebugEvent的返回值DEBUG_EVENT = OUTPUT_DEBUG_STRING_INFO.
这意味着进程暂停,然后Debugger从进程外的某个地址读取进程内的信息.
所以即使是Release Build,其实也运行和Debug基本相同的状态.
由于这用方法有很多优缺点,所以被人诟病:
而且对于有些第三方的代码或者自动生成的,例如把Trace全改成OutputDebugString,都要手工处理,很是头疼.在维护了很久大量的log之后,软件移植或重构,有些log的意义就没有了,又要全部重新维护。
方法就是利用HOOK去把所有的OutputDebugString和AtlTrace...全部转到自己的函数里去。
缺点是并不稳定。