2012-03-01 72 views
1

我通常使用打印語句(重定向到日誌文件)來調試我的程序。 我在頂部放置了一個#define _DEBUG,並將所有打印語句放在#ifdef _DEBUG#endif之間,這樣一旦我確信程序運行正常,我就可以更改#define並且不再出現任何打印語句。刪除調試語句的命令

唯一的缺點是在程序中所有的#ifdefs都不可讀,因爲#ifdefs從行首開始。

有沒有一種方法可以刪除所有的#ifdef,#endif以及它們之間的所有線?

如果定義條件之間有相同數量的打印語句,我可以使用錄製來完成此操作。

+1

你知道嗎,如果你喜歡,你可以縮進'#ifdef'任意數量的空格嗎? – 2012-03-01 00:40:17

+1

不,請告訴我該怎麼做? – Graddy 2012-03-01 00:42:29

+1

即使打印語句的數量不同,您也可以使用/#ifdef^Md /#endif^M進行錄製。 – 2012-03-01 00:42:58

回答

4

我敢肯定,你可以以某種方式將它們刪除,但爲什麼?需要在該行的開頭開始#ifdef S,這是完全正確的:

int getVal (void) { 
    int x = 10 
    #ifdef MY_DEBUG_FLAG 
     printf ("Returning %d\n", x); 
    #endif 
    return x; 
} 

你應該考慮是不是直接在源代碼中的東西,如定義變量的另一件事:

#define MY_DEBUG_FLAG 

大多數編譯器有一個開關,它會做同樣的事情處理的源代碼之前:

gcc -DMY_DEBUG_FLAG ... 

這樣,你只需要改變你的makefile中的全局編譯器標誌(或者你使用的任何構建工具),幾乎可以肯定是在一個地方而不是每個單獨的源文件中。

而且,如果需要,您仍然可以通過臨時更改一個編譯器命令來選擇性地打開單個文件的調試。這是多麼容易取決於你的構建系統,但我所用的所有,使它相當無痛。

+0

我知道它是完全有效的..但是我使用的插件和.vimrc從行的開始處開始.. – Graddy 2012-03-01 00:46:07

+1

因此,更改插件或vimrc。你的工具應該適應你,而不是相反。我甚至不允許自動縮進,因爲我發現它比使用一個CTRL-D更容易敲擊Tab鍵五次,而不是一個CTRL-D來縮進:-) – paxdiablo 2012-03-01 00:47:56

+0

+1爲編譯器標記方法:) – Graddy 2012-03-01 00:51:01

1

一個相當常見的方法是使用預處理器宏來插入只在調試構建過程中編譯的打印語句。 This應該有所幫助。