posts - 36, comments - 30, trackbacks - 0, articles - 0

OutputDebugString使用

Posted on 2007-03-13 18:04 vcommon 阅读(7999) 评论(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...全部转到自己的函数里去。
缺点是并不稳定。

只有注册用户登录后才能发表评论。