2012-10-18 10 views
20

Mam ten kod w mojej klasie C#.Kiedy #if DEBUG działa

#if DEBUG 
     private const string BASE_URL = "http://www.a.com/"; 
#else 
     private const string BASE_URL = "http://www.b.com//"; 
#endif 

Chciałem zapytać, kiedy to ścieżka w kodzie

#if DEBUG 

zostanie wykonany?

Czy zostanie wykonany

  1. Kiedy rozbieg sesję debugowania w Visual Studio?
  2. Kiedy ręcznie uruchamiam plik exe lub dll z folderu debugowania?
  3. Jakiekolwiek inne okoliczności, o których zapomniałem wspomnieć?
+2

'#if DEBUG' nigdy nie działa, ale wpływa na kompilację kodu. –

Odpowiedz

31

#if DEBUG Jest to definicja preprocesora.

Kompiluje się przy definiowaniu stałej DEBUG. I tak, jest to domyślna konfiguracja Debug Build.

Visual Studio 2010 Właściwości projektu: Visual Studio 2010 Project Properties

Jeśli Define DEBUG constant jest sprawdzana VS skompiluje:

private const string BASE_URL = "http://www.a.com/"; 

inne (nie sprawdzone) VS skompiluje:

private const string BASE_URL = "http://www.b.com//"; 
+0

Doskonała odpowiedź. Tak jest nadal w VS2017. – robnick

12

Jest to dyrektywa preprocesora. Kod w części DEBUG jest kompilowany podczas kompilacji debugowania (dokładniej, gdy zdefiniowana jest stała DEBUG). To znaczy. jeśli zrobisz kompilację debugowania BASE_URL wskaże na www.a.com. W przeciwnym razie będzie wskazywać na www.b.com.

7

Podczas kompilacji z dyrektywą DEBUG. Więc jeśli jest ustawiony tylko pierwszy wiersz będzie częścią skompilowanego pliku binarnego, a jeśli nie zostanie ustawiony, druga linia będzie częścią binarnego.

debugowania jest domyślny zestaw podczas kompilacji konfiguracji debugowania w VS jednak można ustawić go ręcznie do dowolnej konfiguracji

2

Jeśli kompilujesz z konfiguracją DEBUG, kod przed innym linkiem e zostanie skompilowany, a drugi nie. Jeśli skompilujesz w jakiejkolwiek innej konfiguracji, druga linia zostanie skompilowana, a pierwsza nie.

+0

Prawda w domyślnej konfiguracji projektów w VS, jednak bez użycia VS lub zmiany ustawień może zawierać symbol DEBUG w konfiguracji _any_ (w tym zwolnienie, jeśli chcesz). –

+0

@RuneFS Dobra uwaga, dziękuję. –

3

To jest "dyrektywa kompilatora", co oznacza, że ​​faktycznie zawiera lub wyklucza kod z procesu kompilacji (lub kompilacji) w oparciu o # jeśli jest wstawiony. Mówiąc o tym, symbol DEBUG jest w właściwości twojego projektu, a w Visual Studio generalnie usuwa się automatycznie w wersji "Release".

Zasadniczo nie musi to być program Visual Studio uruchomiony w debugowaniu i nie musi znajdować się w żadnym określonym folderze, kod jest po prostu zbudowany w ten sposób.

1

VS 2017 rzeczywiście wyczuwać aktywną konfigurację i na przykład będzie szary out warunek debug jeśli zostanie wybrana konfiguracja uwolnienie.

enter image description here

0

przejdź do sekcji "Właściwości projektu" -> Budowanie karcie zgłoszenia. Jeśli konfiguracja: Aktywna (debugowanie), a następnie konfiguracja debugowania jest włączona. Poniższy kod zostanie wydrukowany na konsoli.

#if DEBUG 
    Console.WriteLine("in debug mode..."); 
#endif 

Jeśli Configuration: konfiguracja Aktywny (Release), a następnie wydanie jest enabled.Below kod wypisze na konsoli.

#if RELEASE 
    Console.WriteLine("in release mode..."); 
#endif 

Jeśli chcesz, aby przełączyć między trybie debugowania i zwolnij użyć „Debug/Release/Configuration Manager” drop down tuż pod narzędziami Menu.Apologies jak najbardziej dewelopera to wiem ... ale czasami jest pomijane i powoduje zamieszanie, dlaczego powyższy kod nie działa poprawnie.

Powiązane problemy