linux打印级别控制原理

来源:互联网 发布:怎样玩游戏挣钱知乎 编辑:程序博客网 时间:2024/04/29 23:08

在一个公用的头文件里面放入

#define RT_DEBUG_ERROR        1
#define RT_DEBUG_WARN        2
#define RT_DEBUG_TRACE        3
#define RT_DEBUG_INFO        4

unsigned long RTDebugLevel = RT_DEBUG_ERROR

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

包含此头文件

就可以使用类似:DBGPRINT(RT_DEBUG_TRACE, ("you want print %s:%d\n", str,num));

      此时需要设置RTDebugLevel为RT_DEBUG_TRACE(3)或者RT_DEBUG_INFO (4)才会有打印出现,RT_DEBUG_ERROR(1)、RT_DEBUG_WARN  (2)级别都低于RT_DEBUG_TRACE(3)所以如果RTDebugLevel设置为它们则级别不够无法打印!

实际使用中系统中会有很多不同级别的打印消息,通过修改RTDebugLevel的值就可以改变级别,从而控制打印输出的数量,方便调试;

当然实际情况中并不是所有的宏定义都在一个头文件中,只有开始的四个级别是公用的,RTDebugLevel则是以全局变量的形式出现的,需要引用时使用extern就ok了,通过宏定义DBG还有修改RTDebugLevel可以灵活的的控制打印的数目;


原创粉丝点击