2012-02-14 31 views
0

C++中是否有任何日誌記錄功能,可以通過設置debug = True或類似的方式將調試消息打印到標準輸出來啓用?C++中的logger.debug功能

+0

那麼有[this](http://www.cplusplus.com/reference/iostream/clog/),但它會去'stderr'。 – 2012-02-14 14:39:55

回答

1

慣用的伎倆是這樣的:

void writeLog(const char* message); // Define elsewhere to do your logging 

#ifdef DEBUG 
#define Log(x) writeLog(x) 
#else 
#define Log(x) 
#endif 

// Somewhere in your main code 
Log("This message is only seen if DEBUG is defined at compilation"); 
+0

所以根據debug的值將日誌定義爲不同的東西吧?對不起,我對這種類型的函數定義有點新鮮。 – Cemre 2012-02-14 14:46:08

+1

沒錯。 '#'指令是預處理器的一部分;實質上,在編譯代碼之前,預處理器將在物理上重寫它。如果已經定義了DEBUG(通常作爲項目設置或切換到命令行編譯器),那麼'Log'被替換爲'writeLog';如果沒有定義,「Log」被替換爲空,所以它什麼也不做。 – Chowlett 2012-02-14 14:55:56

+1

只是非常尷尬,標準定義了一個符號'NDEBUG',它影響'assert'宏。所以,如果你希望你的日誌和你的斷言在同一個開關上,你可以使用它,否則你可以添加一些代碼來定義'DEBUG',如果'NDEBUG'是錯誤的,反之亦然。 – 2012-02-14 15:08:47

0
自動

沒有。但是你可以有選擇地定義你自己的方法。

#ifdef DEBUG 
#define DEBUG_MSG(msg) debug(msg) 
#else 
#define DEBUG_MSG(msg) 
#endif