宏开关控制调试信息

本文介绍了如何使用宏开关来控制调试信息的输出,以消除使用/符号带来的编译警告。通过定义不同的宏,实现了既能打印简单信息又能处理包含多个参数的调试语句,且无警告。
摘要由CSDN通过智能技术生成
最近调试驱动,想把调试信息注册掉,一条一条删除或者添加挺麻烦,于是想加上调试信息开关,下面是搜罗的方法。


#define  __DEBUG__     //宏开关


#ifdef __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

所以采用改进方法


#ifdef __DEBUG__ //改进方法
#define DebugMessagePrint(fmt,args...) printk(fmt, ##args);
#else
#define DebugMessagePrint(fmt,args...) 
#endif

此方法可以打印多个变量,同时没有警告信息



#ifdef __DEBUG__ //方法1
#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值