如何构建个人网站,网络工程师,上海最大广告公司有哪些,代做企业网站What I write, what I lost. 对于依靠打印来作debug的主要手段的, 能够区分打印中的debug信息和error信息便显得非常重要. 原文的介绍有一篇关于控制台颜色的文章http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip01/ 有定义实现各种颜色的方式. 以此为基础, 方式挺…What I write, what I lost. 对于依靠打印来作debug的主要手段的, 能够区分打印中的debug信息和error信息便显得非常重要. 原文的介绍有一篇关于控制台颜色的文章http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip01/ 有定义实现各种颜色的方式. 以此为基础, 方式挺有用的. 贴一段之前的使用的debug宏定义. debug的等级分为 info(关键步骤的打印.) debug(调试用的打印.) data(具体调试的时候打开的开关.) api(函数进出的打印.) warning(警告的打印. 通常用于程序已经出错, 但是不想程序就此终止.) error(错误的打印. 程序发生错误. 可能是系统的, 可能是程序错误.) fatal(严重的错误. 此时程序终止是最好的反应.) 主要想法是在程序输出众多的打印中, 能使用颜色区分开关键性的信息. #define __FILENAME__ ((strrchr(__FILE__, /) NULL)?__FILE__:((strrchr(__FILE__, /) 1)))#define COLOUR_INFO(x) x
#define COLOUR_DEBUG(x) \e[34;2mx\e[0m
#define COLOUR_DATA(x) \e[34;1mx\e[0m
#define COLOUR_API(x) \e[34;1mx\e[0m
#define COLOUR_WARNING(x) \e[36;1mx\e[0m
#define COLOUR_ERROR(x) \e[31;1mx\e[0m
#define COLOUR_FATAL(x) \e[31;1mx\e[0m#define DBG_FLAG_INFO 11
#define DBG_FLAG_DEBUG 12
#define DBG_FLAG_DATA 13
#define DBG_FLAG_API 14
#define DBG_FLAG_WARNING 15
#define DBG_FLAG_ERROR 16
#define DBG_FLAG_FATAL 17#define DBG_FLAG_MODULE (DBG_FLAG_INFO | DBG_FLAG_DEBUG | DBG_FLAG_WARNING | DBG_FLAG_ERROR | DBG_FLAG_FATAL)#define DBGPRINTF_INFO(x...) \
do\
{\if(DBG_FLAG_INFO DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_INFO([%20.20s,%36.36s][%6d][ Info: ] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0)#define DBGPRINTF_DEBUG(x...) \
do\
{\if(DBG_FLAG_DEBUG DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_DEBUG([%20.20s,%36.36s][%6d][ Debug: ] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0)#define DBGPRINTF_DATA(x...) \
do\
{\if(DBG_FLAG_DATA DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_DATA([%20.20s,%36.36s][%6d][ Data: ] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0)#define DBGPRINTF_API(x...) \
do\
{\if(DBG_FLAG_API DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_API([%20.20s,%36.36s][%6d][ Api: ] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0)#define DBGPRINTF_WARNING(x...) \
do\
{\if(DBG_FLAG_WARNING DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_WARNING([%20.20s,%36.36s][%6d][Warning:] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0)#define DBGPRINTF_ERROR(x...) \
do\
{\if(DBG_FLAG_ERROR DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_ERROR([%20.20s,%36.36s][%6d][ Error: ] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0)#define DBGPRINTF_FATAL(x...) \
do\
{\if(DBG_FLAG_FATAL DBG_FLAG_MODULE)\{\P_PRINTF(COLOUR_FATAL([%20.20s,%36.36s][%6d][ Fatal: ] ), __FILENAME__, __FUNCTION__, __LINE__); P_PRINTF(x);\}\
}while(0) DBGPRINTF_XXX 都可以在有些环境下换成printf直接使用.当使用调试模式的时候, 可以根据不同的打印级别, 打印出不同的颜色.扩展: 1.加上动态控制打印级别的API. 比如某些文件需要不同的打印级别. 2.加上所属线程. (对多线程程序有些作用). 3.加上时间标签. 如果使用gettimeofday不知道时候会降低系统效率. 更严重的是可能在多线程环境下打乱时序. 另外便是在ubuntu环境下发现 printf 和 gettimeofday交替使用的时候造成程序阻塞在gettimeofday. 实在是奇怪. 赶脚高手们应用程序少用debug打印的, 使用gdb才是王道.什么时候成为gdb高手最好啦.另外个人感觉, 良好的编程习惯和好的基础知识. 可以让你避免碰到那些低级的bug.是么.谢谢. 转载于:https://www.cnblogs.com/freezee/archive/2012/06/06/printf.html