最近调试驱动,想把调试信息注册掉,一条一条删除或者添加挺麻烦,于是想加上调试信息开关,下面是搜罗的方法。
#define __DEBUG__ //宏开关
#define DebugMessagePrint printk
#else
#define DebugMessagePrint /\ //这里需要注意 \这个符号是向下换行,这一句就是宏定义为//DebugMessagePrint,其中必须用换行,否则就相当于注释了
/DebugMessagePrint
#ifdef __DEBUG__ //改进方法
#define DebugMessagePrint(fmt,args...) printk(fmt, ##args);
#else
#define DebugMessagePrint(fmt,args...)
#endif
#define DebugMessagePrint(flag) printf flag
#else
#define DebugMessagePrint(flag)
#endif
#ifdef __DEBUG__ //方法2
#include <stdarg.h>
void debug(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
}
#else
void debug(const char *fmt, ...)
{
}
#endif
#ifdef __DEBUG__//方法3
#define DbgPrintf printf//使用\换行符注释
#else
#define DbgPrintf /\
/DbgPrintf
#endif
#ifdef __DEBUG__//方法4
#define DBG(CODE) CODE
#else
#define DBG(CODE)
#endif
void main()
{
printf("正常0:%ds\n",time(NULL));
DebugMessagePrint(("方法1:%ds\n",time(NULL)));
debug("方法2:%ds\n",time(NULL));
DbgPrintf("方法3:%ds\n",time(NULL));
DBG(printf("方法4:%ds\n",time(NULL));)
}
可以运行上边的代码,查看具体的实现结果。
在Linux下,常用下边的宏来打印信息来定位
#ifdef __DEBUG__
#define DEBUGMSG() printf("file:%s(%d),function:%s\n",__FILE__,__LINE__,__FUNCTION__)
#else
#define DEBUGMSG()
#endif
#define __DEBUG__ //宏开关
#define DebugMessagePrint printk
#else
#define DebugMessagePrint /\ //这里需要注意 \这个符号是向下换行,这一句就是宏定义为//DebugMessagePrint,其中必须用换行,否则就相当于注释了
/DebugMessagePrint
#endif
这一个方法可以用,但是由于使用 /\符号所以会有很多警告,warning: left-hand operand of comma expression has no effect
我的方法2:这种方法只能打印一句话,如printk("123");无法打印含有多个参数的信息
#ifdef CAMERA_DBG
#define CAMERA_TRACE(x) (printk)x
#else
#define CAMERA_TRACE(x)
#endif
所以采用改进方法
#define DebugMessagePrint(fmt,args...) printk(fmt, ##args);
#else
#define DebugMessagePrint(fmt,args...)
#endif
此方法可以打印多个变量,同时没有警告信息
#define DebugMessagePrint(flag) printf flag
#else
#define DebugMessagePrint(flag)
#endif
#ifdef __DEBUG__ //方法2
#include <stdarg.h>
void debug(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
}
#else
void debug(const char *fmt, ...)
{
}
#endif
#ifdef __DEBUG__//方法3
#define DbgPrintf printf//使用\换行符注释
#else
#define DbgPrintf /\
/DbgPrintf
#endif
#ifdef __DEBUG__//方法4
#define DBG(CODE) CODE
#else
#define DBG(CODE)
#endif
void main()
{
printf("正常0:%ds\n",time(NULL));
DebugMessagePrint(("方法1:%ds\n",time(NULL)));
debug("方法2:%ds\n",time(NULL));
DbgPrintf("方法3:%ds\n",time(NULL));
DBG(printf("方法4:%ds\n",time(NULL));)
}
可以运行上边的代码,查看具体的实现结果。
在Linux下,常用下边的宏来打印信息来定位
#ifdef __DEBUG__
#define DEBUGMSG() printf("file:%s(%d),function:%s\n",__FILE__,__LINE__,__FUNCTION__)
#else
#define DEBUGMSG()
#endif
- /**
- * 简单打印调试信息
- */
- #define DEBUG_SWITCH 1