寫程式往往會 print 一堆變數或是訊息用來 Debug
而 Release Code 時,又不希望這些 Debug Message 鋪天蓋地的出現
或是, 印了一堆訊息,卻不知道某個訊息是
哪個檔案的哪個 function 的哪一行所印出來印出來的訊息?
由於上述問題,於是長久以來
我都會用 define 寫一個專門印 debug message 之用的巨集
並利用 #define _DEBUG_ 開啟
當 Release Code 時 , 將這行註解掉,所有的 message 就會統統消失
而 Release Code 時,又不希望這些 Debug Message 鋪天蓋地的出現
或是, 印了一堆訊息,卻不知道某個訊息是
哪個檔案的哪個 function 的哪一行所印出來印出來的訊息?
由於上述問題,於是長久以來
我都會用 define 寫一個專門印 debug message 之用的巨集
並利用 #define _DEBUG_ 開啟
當 Release Code 時 , 將這行註解掉,所有的 message 就會統統消失
印出訊息包含程式檔案名稱、message 所在的行號及 function name 資訊
除了可以直接印一行字串之外
也可以印出多個變數並可以定自訂 format
#ifdef _DEBUG_
#define Dbg(f,m...) printf( "%s(line:%d)|%s()| "#m": "f"\n" \
,__FILE__, __LINE__, __FUNCTION__ ,##m)
#else
#define Dbg(m)
#endif範例:
#include
#define _DEBUG_
#ifdef _DEBUG_
#define Dbg(f,m...) printf( "%s(line:%d)|%s()| "#m": "f"\n" \
,__FILE__, __LINE__, __FUNCTION__ ,##m)
#else
#define Dbg(m)
#endif
int main()
{
int MyVal = 100;
int MyVal2 = 1024;
Dbg("Spark Test Msg");
Dbg("%d",MyVal);
Dbg("0x%08x", MyVal);
Dbg("(Hex) 0x%x", MyVal);
Dbg("(Hex) 0x%x, 0x%x", MyVal, MyVal2);
return 0;
}輸出結果:
[root@localhost tmp]# ./a.out
t.c(line:18)|main()| : Spark Test Msg
t.c(line:19)|main()| MyVal: 100
t.c(line:20)|main()| MyVal: 0x00000064
t.c(line:21)|main()| MyVal: (Hex) 0x64
t.c(line:22)|main()| MyVal, MyVal2: (Hex) 0x64, 0x400
沒有留言:
張貼留言