扩展OutputDebugString,自定义Trace

前面介绍了使用OutputDebugString来帮助我们调试,但使用OutputDebugString有一些限制,它的参数必须是LPCTSTR类型的,所以其他整形、浮点型、字符型等都必须使用sprintf之类的函数先做转换,每次转换就比较麻烦了,不如定义个内联函数来使用:

#ifdef _DEBUG
    //    对应Unicode的调试输出
    inline void MyTraceW(LPCTSTR strFormat, ...)
    {
        const int BUFFER_SIZE = 128;
        va_list args = NULL;
        va_start(args, strFormat);
        TCHAR szBuffer[BUFFER_SIZE] = { 0 };
        _vsntprintf(szBuffer, BUFFER_SIZE, strFormat, args);//_vsnwprintf for Unicode
        va_end(args);
        ::OutputDebugString(szBuffer);
    }
    //    对应ASCII的调试输出
    inline void MyTraceA(const char* strFormat, ...)
    {
        const int BUFFER_SIZE = 128;
        char   szBuffer [BUFFER_SIZE] = {0};
        va_list args = NULL;

        // The va_start macro (defined in STDARG.H) is usually equivalent to:
        // pArgList = (char *) &szFormat + sizeof (szFormat) ;
        va_start (args, strFormat) ;

        // The last argument to wvsprintf points to the arguments
        _vsnprintf ( szBuffer, BUFFER_SIZE, strFormat, args) ;

        // The va_end macro just zeroes out pArgList for no good reason
        va_end (args);
        ::OutputDebugStringA (szBuffer);
    }
#endif // _DEBUG
};

 
在软件的开发过程里,大部份时间是在做什么呢?其实是在调试代码,毕竟人类的思维方式是从简单到复杂的过程,自然的认知过程也是从简单到复杂。因此,开发软件时,第一个版本总是先写简单的,然后慢慢地添加出错处理上去,也把一些没有想到的情况添加进去,那些没有想到的错误,就叫做BUG。要根除一个软件里的BUG,是一件不容易的事情,不但要对这个软件流程比较熟悉,还要对这个软件的目标比较了解,还需要对这个开发平台了解,当然还需要不断地测试不同的条件是否出错。软件的条件组合是2N次方,所以不可能把所有组合都测试完成,只能选择比较重要的进行测试,只要不影响软件的使用,这个软件就算是一款能够挣钱的软件了,不要希望这个软件一点BUG都不出现,那是不现实的,或者说付出的代价也太大了,导致这个软件的开发成本过高,公司当然是不能生存下去。因此,怎么样去平衡可使用性与软件的BUG,就成为一件艺术的事情。不同的场合是不同的需求的,一定不要为了完美而完美。下面就介绍怎么样使用OutputDebugString来输出调试信息到开发平台里。
 
 
 
 
TRACE() is a part of MFC. OutputDebugString is Windows API. TRACE is a macro. It will be removed in Release built. You can do printf() like format in TRACE() but not OutputDebugString:     TRACE("The number is %d\n", i);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值