C語言,調試必備的DEBUG宏定義

1.html

#include <stdio.h>
#include <stdarg.h>

//僅僅是打印函數名字替換 DEBUG <--> printf
#define DEBUG(format, ...) printf(format, ##__VA_ARGS__)

//替換打印函數,在打印出來的內容加上前綴
#define XFUNC_PRINT(format, arg...) printf("XFUNC: " format "", ##arg)

//名字替換,並在打印出來的內容加上前綴,同時加入定位的功能。
#define TRC_P(fmt, args...) fprintf(stderr,"  TRC_P(%s:%d):\t" fmt, __func__, __LINE__, ##args)

//名字替換,並在打印出來的內容加上前綴,同時加入定位的功能,並讓打印的前綴具有特殊顏色(\033[1;32m  \033[0m這些表示顏色,\t必定程度上使屏幕輸出對齊)
#define TRC_PG(fmt, args...) fprintf(stderr, "\033[1;32m  TRC_PG(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ## args)

//名字替換,並在打印出來的內容加上前綴,同時加入定位的功能,並讓打印的前綴具有特殊顏色
#define TRC_PR(fmt, args...) fprintf(stderr, "\033[1;31m  TRC_PR(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ## args)

int main(void)
{
    int i= 0;

    DEBUG("hello,%d\n",i++);
    XFUNC_PRINT("hello,%d\n",i++);
    TRC_P("hello,%d\n",i++);
    TRC_PG("hello,%d\n",i++);
    TRC_PR("hello,%d\n",i++);

    return 0;
}

/*
[root@localhost jz2440]# gcc test.c ;./a.out 
hello,0
XFUNC: hello,1
  TRC_P(main:27):       hello,2
  TRC_PG(main:28):      hello,3  ----這裏前綴是綠色的
  TRC_PR(main:29):      hello,4  ----這裏前綴是紅色的
*/

2.linux

#include <stdio.h>
//以十六進制打印一個數val的值,輸出格式爲val=0x...
#define HEX_PI(VAL)\
do{\
    printf(#VAL"=%#x,fuc:%s,line:%d\n", VAL, __FUNCTION__, __LINE__);\
}while(0)
//以十進制打印一個數val的值,輸出格式爲val=...
#define DEC_PI(VAL)\
do{\
    printf(#VAL"=%#d,fuc:%s,line:%d\n", VAL, __FUNCTION__, __LINE__);\
}while(0)
    
void main(void)
{
    int i = 123;
    int j = 123;
    HEX_PI(i);
    HEX_PI(j);    
    
    DEC_PI(i);
    DEC_PI(j);
}


//i=0x7b,fuc:main,line:17
//j=0x7b,fuc:main,line:18
//i=123,fuc:main,line:20
//j=123,fuc:main,line:21

 

3. 配合宏開關在編譯前靜態指定打印等級函數

#if CUR_PLEVEL > 5post

#define TRC_PR(fmt, args...) fprintf(stderr," TRC_P(%s:%d):\t" fmt, __func__, __LINE__, ##args)url

#endifspa

 

4. 想要動態地指定打印等級,要使用相似內核打印的宏定義code

見另外一篇文章: 似linux內核的分等級DEBUG宏(打印宏)http://www.cnblogs.com/mylinux/p/5906576.htmlorm

相關文章
相關標籤/搜索