2010-06-16 15 views
5

如何在ac#程序中放置「IF DEBUG」條件,以便在運行時,如果您在Debug模式下運行,它將忽略一組代碼,但如果程序沒有運行,則執行一段代碼在調試模式下運行?可以使用這種情況的情況是,如果在塊的開始處拍攝時間戳,並且在末尾拍攝另一個時間戳。 THey在運行時幾乎沒有區別。然而,如果你在調試模式下逐步完成代碼,它們會有很大的不同,並且「if block」中的錯誤條件可能會被啓動,導致某些代碼的不合時宜(雙關語)執行。如何在C#程序中添加「IF調試」條件?

回答

15

你只要把你的代碼在這樣的塊:

#IF DEBUG 

//code goes here 

#endif 

這是不是一個運行時的事情,這是一個預處理器指令,這意味着該塊中的代碼,甚至不會被編譯並會不包括在內。

如果你想在運行時檢查,如果你正在調試,您可以檢查Debugger.IsAttached

+2

+1爲「運行時」位 – Earlz 2010-06-16 19:31:18

+2

On'Debugger。IsAttached',我相信如果您在生產站點上進行遠程調試,情況將會如此。是的,我知道你通常不想這樣做,但是在一些邊緣情況下,你無法弄清楚有什麼不對,這可能會有所幫助。如果您使用遠程調試,只要確保您的「調試」代碼不會在生產環境中導致問題。 – 2010-06-16 21:10:08

+0

+1 @Nelson:遠程調試(附加調試器)是調試Windows服務的唯一方法。 – 2010-06-17 21:43:09

5

使用預處理指令的#if:

#if debug 
    // run in debug mode 
#else 
    // run if not in debug mode 
#endif 
+0

不能正常工作,請參閱OP ...以便在運行時... – KevinDTimm 2010-06-16 20:20:58

0
#if DEBUG 
     // something 
#elif 
     // some other thing 
#endif 
+0

不起作用,請參閱OP ...以便在運行時... – KevinDTimm 2010-06-16 20:22:06

+0

@KevinDTimm:啊,錯過了這一點。不介意我,我只是給出了錯誤的答案 – simendsjo 2010-06-17 06:38:57

3

您還可以使用

[Conditional("Debug")] 

屬性的方法。

+0

不工作見OP ...因此,在運行時... – KevinDTimm 2010-06-16 20:22:31

0
#if (DEBUG) 
... 
#else 
... 
#endif 

在這裏看到:http://bloggingabout.net/blogs/rick/archive/2005/03/10/2396.aspx

+0

不工作見OP ...因此,在運行時... – KevinDTimm 2010-06-16 20:22:49

+0

@KevinDTimm:雖然提問者說「在運行時」,但我沒有看到爲什麼他的特定場景不能被預處理器指令處理。在調試模式下運行時,似乎他想跳過'if(ItTookALongTime)'東西,因爲在調試模式下,我們預計它可能需要很長時間......所以爲什麼不確保'if(ItTookALongTime)'東西我們編譯調試時排除在外? – 2010-06-16 20:38:11

+0

,因爲這不是他要求的:) 他想要一種方法來打開一個標誌用於調試目的,這可能很容易成爲一種方式(在未來)打開日誌記錄(例如)。 – KevinDTimm 2010-06-16 21:59:06

1

一對夫婦更多的細節:

  • 你可以用一個完整的方法,或只是一個代碼塊,或只是一個代碼行。
  • 您需要添加using System.Diagnostics;
+0

解決問題的唯一答案 – KevinDTimm 2010-06-16 20:02:39

0

由於所有其他的答案(但一個)並沒有解決你的問題,讓我來試試:

如果你希望有一個運行時開關,你需要一個從您的環境或命令行獲取信息的方式。另外,一旦你獲得了這些信息,你就需要將它應用到你的程序中。

1)爲此,您需要一個全局變量。

bool bDebug; 

2)獲得的調試信息

bDebug = strcmp (getEnv ("DebuggingMode"), "1"); // you'll need to mess with this a little - do 'man getenv' and 'man strcmp' for an understanding of what I'm doing 
  • 或 -

利用getopt()功能,以找出是否調試關閉或

3)每在你的代碼中放入你想要打開調試的代碼,檢查bDebug是否是設置爲

if (bDebug) { 
    // do something 
    }