自定义Trace Trace0 Trace1… ASSERT 调试宏
来源:互联网 发布:淘宝排查实际控制人 编辑:程序博客网 时间:2024/04/29 11:17
MFC 中的TRACE开头的宏和ASSERT 用起来挺爽的,可是到了Console 和 Win32下就不好使了,今天正好有雅兴自己也弄几个这样的宏,方便今后使用。
需要实现的功能有以下几点:
1.支持格式化输出,如Trace0(“%d,%s…)。
2.支持序列化输出,如Trace(0,”abc”<<10<<20.0f<
3.可以设置最高输出等级。例如设置最高输出等级为2,在程序调试过程中只有等级<=2的函数(Trace0,Trace1,Trace2)才可以输出调试信息。
4.支持ASSERT断言宏
5.可以设置输出到日志文件、控制台和调试窗口多种方式。
6.支持多线程。
定义个类来封装下这些功能吧:
主要的几个函数:
1.BeginTrace 函数:
跟据配置信息打印各类初始化信息,同时对线程进行加锁。
2.TraceFormat 函数,实现格式化输出:
由va_list va_start va_end vsprintf 这系列宏和函数对可变参数进行解析,将格式化的的字符串追加到m_cbTraceBuffer 中。
3.重载 “<<” 操作符的函数,找几个函数来说明一下吧:
将传入的数据通过_snprintf 函数格式化后追加到m_cbTraceBuffer 中,下面是数值型的两个函数:
通过实现C++ 每个基本数据类型“<<”操作符重载后,就可以对每个基本数据类型的数据进行序列化操作了。
4.EndTrace 函数
跟据配置信息打印 m_cbTraceBuffer 中的数据,重置数据下次使用,并对线程解锁。
5.AssertFail 断言失败处理函数
处理断言失败,弹出类似于MFC 中的断言框,不过上面的文字是中文的。^_^
DebugTrace 类使用方法和Trace,Assert 宏的定义:
通过上面的代码不难看出来要打印一条信息最主要的几步是先调用下BeginTrace 函数,然后调用TraceFormat 或者重载“<<”操作符的函数,将数据依次追加到 m_cbTraceBuffer 中。最终调用EndTrace 将m_cbTraceBuffer 中的数据打印出来,下面看下如何将这一系列操作定义成一个宏。
1.实现支持格式化输出的宏,如Trace0(“%d,%s…) 。
2.实现支持序列化输出,如Trace(0,<<”abc”<<10<<20.0f<<5);
3.实现支持ASSERT断言宏
总结下吧:
CDebugTrace 类需要在工程中定义成全局变量来方便使用,并确保在调用到的cpp中“extern” 了全局变量。需要注意的是所有的字符操作都是调用ANSI 版的函数完成的,所以在使用的过程中不要出现“Trace0(TEXT(“%d,%s”),2,…);”或 “Trace0(_T(“%d,%s”),2,_T(“test”));”带有“TEXT”和“_T”宏的使用方式。
- 自定义Trace Trace0 Trace1… ASSERT 调试宏
- TRACE、TRACE0、TRACE1、TRACE2、TRACE3
- afxDump,TRACE,TRACE0
- TRACE( " "); 和 TRACE0( " ")
- VC调试 TRACE宏、ASSERT宏、VERIFY 宏 介绍
- vc中用于调试的宏(ASSERT,VERIFY,TRACE) (转载)
- 浅析ASSERT&TRACE宏
- 浅析ASSERT&TRACE宏
- Visual C++调试 ASSERT()和TRACE()工具
- VC调试方法大全-trace、assert、verify
- TRACE、ASSERT和VERIFY宏
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- 在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
- ASSERT VERIFY TRACE assert
- 异步加载的表单
- zoj 2271 Chance to Encounter a Girl
- java 验证邮箱格式正确性
- 建造者模式(Builder)
- Ext+XML实现数据载入
- 自定义Trace Trace0 Trace1… ASSERT 调试宏
- Eclipse与Weblogic的安装与配置(转)
- 获取鼠标坐标
- Solaris下安装Oracle_启动Oracle及监听
- 数据结构概论
- javascript 常用代码大全
- 设计模式简介
- vs 水晶报表的实现
- 使用Session在JSP页面间传递表单内容