个人理解—debug宏

        前面的文章简单的提及过debug宏,但没进行详细的分析。首先,debug宏是用于程序调试的宏,一般而言,程序调试的方法有许多,利用调试器进行的常见调试方案有单步调试、裸机LED调试、log文件信息等。

        单步调试是指利用调试器(IDE或JLINK等工具)适用于初步学习单片机的新手,好处是直观,坏处是限制大,调试速度慢。

        裸机LED调试,利用LED或者蜂鸣器硬件进行调试,好处不怎么受硬件限制,适用于裸机、单片机,坏处是信息显示不直观。

        printf打印调试,是一种程序开发很常用的调试方式,但因为在单片机中由于一般未对printf进行移植,所以用不了,串口通信未实现时也用不了。

        log文件,也就是日志文件,是系统在运行时进行的记录,并在文件中可见相应信息,以便日后追查,适用于系统级调试与大型程序调试。

        调试信息不能太多也不能太少,太少找不到问题,太多淹没有用的信息。

         debug版本,包含了调试信息输出的版本,会打印出调试的信息或log文件用于调试,坏处是调试信息占用系统,运行效率低。

        release版本,正式版,去除了调试信息,是正式发布的版本效率高于debug版本。

        二者的代码相同,只有条件编译上不同。

#ifdef BEBUG
#define def() printf();
#else
#define def()
#endif

        在宏定义中__xxx__是预定义宏,该功能是c语言自带的。例如:

__FILE__   代表文件
__FUNCTION__ 代表函数
__LINE__  代表行

        实际的使用方式为:

#define __DEBUG__  
#ifdef __DEBUG__  
#define DBG(...) fprintf(stderr,"DBG(%s,%s(),%d):"__FILE__,\
__FUNCTION__,__LINE__);fprintf(stderr,__VA_ARGS__);  
#else  
#define DEBUG(...)  
#endif  


在函数中调用DBG(),DBG("tiao shi\n"); =>DBU(xxx.c,main(),14:tiao shi)。内容为文件名,所在函数名,行号,调试信息

        其中__VA__ARGS__用于在宏中替换中,表示可变参列表。

#define LOG(...) PRINTF(__VA_ARGS__)

...

LOG("score is %d\n",96); =>score is 96
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值