Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27051
  • 博文数量: 6
  • 博客积分: 212
  • 博客等级: 二等列兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-15 10:45
文章分类

全部博文(6)

文章存档

2011年(3)

2009年(3)

我的朋友
最近访客

分类: C/C++

2009-08-07 10:30:19


在c文件函数的上方加上这个宏定义之后,可以方便的开启和关闭调试功能,内核代码中经常看到类似技巧。

#if    1
#define    DEBUGP    printf
#else
#define    DEBUGP(fmt, ...)
#endif

分级调试

#ifndef DBG
#define DBG
#endif

//

// Debug information verbosity: lower values indicate higher urgency

//

#define RT_DEBUG_OFF 0
#define RT_DEBUG_ERROR 1
#define RT_DEBUG_WARN 2
#define RT_DEBUG_TRACE 3
#define RT_DEBUG_INFO 4
#define RT_DEBUG_LOUD 5


#ifdef DBG
extern ULONG        RTDebugLevel;

#define DBGPRINT_RAW(Level, Fmt) \
do{ \
    if (Level <= RTDebugLevel) \
    { \
        printk Fmt; \
    } \
}while(0)

#define DBGPRINT(Level, Fmt) DBGPRINT_RAW(Level, Fmt)


#define DBGPRINT_ERR(Fmt) \
{ \
    printk("ERROR!!! "); \
    printk Fmt; \
}

#define DBGPRINT_S(Status, Fmt)        \
{                                    \
    printk Fmt;                    \
}
#else
#define DBGPRINT(Level, Fmt)
#define DBGPRINT_RAW(Level, Fmt)
#define DBGPRINT_S(Status, Fmt)
#define DBGPRINT_ERR(Fmt)

#endif

#undef ASSERT
#define ASSERT(x) \
{ \
    if (!(x)) \
    { \
        printk(KERN_WARNING __FILE__ ":%d assert " #x "failed\n", __LINE__); \
    } \
}


//put this in .c file

//ULONG    RTDebugLevel = RT_DEBUG_ERROR;


//example

/*
ULONG    RTDebugLevel = RT_DEBUG_ERROR;
DBGPRINT(RT_DEBUG_ERROR, ("hello,debug=%s", "aaa"));
*/


阅读(1591) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~