程序调试的DEBUG宏

debug宏的实现原理
(1)DEBUG宏大概的原理是:

#ifdef DEBUG
#define dbg() printf()
#else
#define dbg()
#endif

(2)工作方式是:如果我们要输出DEBUG版本则在条件编译语句前加上#define DEBUG即可,这样程序中的调试语句dbg()就会被替换成printf从而输出;如果我们要输出RELEASE版本则去掉#define DEBUG,则dbg()就会被替换成空,则程序中所有的dbg()语句直接蒸发了,这样的程序编译时就会生成没有任何调试信息的代码。

分析几个DEBUG宏
(1)应用程序中DEBUG宏

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

注:__FILE__等是C语言中的预定义宏,就是说这个东西是个宏定义,但是是C语言自己定义的。这些宏具有特殊的含义,譬如__FILE__表示当前正在编译的c文件的文件名,…表示c语言中的可变参数。

(2)内核中的DEBUG宏

#ifdef DEBUG_S3C_MEM
#define DEBUG(fmt, args...) printk(fmt, ##args)
#else
#define DEBUG(fmt, args...) do {} while (0)
#endif

简单代码展示:

#include <stdio.h>

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

int main(void)
{
        DBG("tiaoshi\n");

        return 0;
}

应用层
靠DEBUG宏来条件编译控制生成哪个版本:
这里把前面的#define DEBUG去掉就变成了RELEASE。

DEBUG和RELEASE两个版本的区别:
(1)DEBUG版本就是包含了调试信息输出的版本,在程序测试过程中会发布DEBUG版本,这种版本的程序运行时会打印出来调试信息/log文件这些调试信息会帮助测试人员判断程序的问题所在,但是它占用了系统资源,拖慢了系统运行速度,所以RELEASE版本是高于DEBUG版本。RELEASE版本是最终发行版,他两的源代码一样,只是去掉了调试信息,提高了系统运行速度。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值