当前位置: 技术问答>linux和unix
如何在UNIX的C编程中使用类似VC里面的TRACE宏?或者有没有类似功能?
来源: 互联网 发布时间:2016-04-07
本文导语: 如何分别提供debug和release版本,从而RELEASE版本不输出TRACE到屏幕上的一些信息。 谢谢! | 哈哈,你问我就问对了,你是需要一种Unix下的写日志等一系列的机制把,一般使用宏,比如定义一个...
如何分别提供debug和release版本,从而RELEASE版本不输出TRACE到屏幕上的一些信息。
谢谢!
谢谢!
|
哈哈,你问我就问对了,你是需要一种Unix下的写日志等一系列的机制把,一般使用宏,比如定义一个函数TraceLog,当宏DEBUG有时,他写日志,没有时不写。而且一般还有ASSERT宏,如ASSERT(x),当x为真的时候,不写东西,当x为假时才写,而且将当前文件名和行数也写入了(分别是__FILE__和__LINE__),具体的内容你可以看《精通Unix下C语言编程于项目实践》上面介绍的通用编程库之调试库。第5章部分,上面有详细的解释。
|
用宏定义,在编译时通过编译器选项决定是否打开。
Logging机制的实现可以参考ACE。TRACE和ASSERT都是最简单的应用。标准C里有assert,不需要自己定义。
Logging机制的实现可以参考ACE。TRACE和ASSERT都是最简单的应用。标准C里有assert,不需要自己定义。
|
可以自己写makefile文件实现。其实makefile文件比VC的机制灵活的多
|
实现类似于TRACE:
#ifndef __DEBUG_H_
#define __DEBUG_H_
#undef PDEBUG
#ifdef BUFFBAK_DEBUG
# ifdef __KERNEL__
# define PDEBUG(fmt,args...) printk(
KERN_ALERT"buffer_backup[%s L%d]:"fmt,
__FILE__,__LINE__,args )
# else
# define PDEBUG(fmt,args...) printf(
"buffer_backup[%s L%d]:"fmt,
__FILE__,__LINE__,args)
# endif
#else
# define PDEBUG(fmt,args...)
#endif
|
日志其实就是写道一个文件而已。比如TraceLog(stderr, "%s", cc"),用stderr就是写道屏幕上,用stdout也是,如果是其它的文件,就是写道文件中去,很方便的。