Co to jest użycie dyrektywy pre-procesora w języku C#? Kiedy musimy tego użyć?Co to jest użycie dyrektywy pre-procesora #if DEBUG w C#? Kiedy musimy tego użyć?
Odpowiedz
W trybie debug:
#if DEBUG
System.Console.WriteLine("Debug version");
#endif
System.Console.WriteLine("Output");
wyprowadzane jako
Debug version
Output
W trybie wydania:
#if DEBUG
System.Console.WriteLine("Debug version");
#endif
System.Console.WriteLine("Output");
wyprowadzane jako
Output
przeczytać: #if (C# Reference)
Zastosowanie: Jeśli masz zestaw wartości mają być testowane w trybie debugowania, a nie w trybie zwolnienia można skorzystać #if DEBUG
Nie musisz jej wcale używać. Celem jest posiadanie sekcji kodu, które są kompilowane tylko w trybie debugowania. na przykład możesz mieć kod zezwalający na administratora, który mógłby udawać innego użytkownika w systemie do testowania i debugowania prufoses. Nie chciałbyś, aby ten użytkownik był włączony w kodzie zwolnienia ze względów bezpieczeństwa, więc możesz zawinąć odpowiednie sekcje kodu w #if DEBUG i zostaną one wykluczone z kodu zwolnienia.
Podczas kompilacji można ustawić flagi kompilatora, których można użyć do umieszczenia kodu w tych dyrektywach. Ten kod nie zostanie skompilowany i nigdy nie zakończy się końcowym wynikiem montażu. DEBUG jest jednym z predefiniowanych, ale możesz użyć własnego.
Jako przykład użycia: W jednym z bieżących wydarzeń używamy flagi kompilatora, aby określić, czy użyć maski logowania, aby zalogować użytkownika, czy też logowanie powinno nastąpić automatycznie z bieżącą osobą. Drugi tryb przeznaczony jest tylko dla programistów debugowanie jest szybsze bez konieczności logowania.
Inny przykład: w niektórych kodach mono zobaczysz flagi. W tym przypadku kod może być kompilowany inaczej, gdy np. targetowanie w innym środowisku, ponieważ używa klas, które mogą nie istnieć we wcześniejszych wersjach.
Wiąże się z tym warunkowy -atrybut, za pomocą którego można oznaczyć metodę. Jeśli wspomniana flaga nie jest ustawiona, wywołania metody nie zostaną wykonane. Metoda nadal kończy się w IL, ale połączenia zostaną usunięte.
Sprawdź na przykład następujący kod:
var mthods = typeof (Debug).GetMethods().Where(mi => mi.Name.Equals("WriteLine")).ToList();
var attribs = mthods[0].GetCustomAttributes(true);
Można zauważyć, że metoda Debug.WriteLine posiada atrybut warunkowego zastosowane do niego: Połączenia zostanie on usunięty podczas kompilowania BEZ flaga DEBUG kompilatora.
Możesz czuć się bardziej komfortowo z atrybutem Conditional
, które mogą być używane w celu wykluczenia całych metody, bez konieczności komplikować źródło z warunkowych na stronie wywołującego:
[Conditional("DEBUG")]
void Foo()
{
}
Foo()
śmiało można nazwać zarówno debugowanie i zwalnianie - jednak w trybie zwolnienia byłaby to operacja "no-op".
co to jest 'no-op'? – gingerbreadboy
To specjalne polecenie IL, które zasadniczo mówi "nic nie rób". Jest to szczególnie przydatne, gdy umieścisz punkty przerwania w miejscach, w których nic się nie dzieje (np. Otwarty nawias) - w ten sposób debugger może zsynchronizować kod i wykonać polecenie IL – flq
+1 dla operacji bez zgody operatora. pięknie wytłumaczyć .. –
przydaje się również podczas testowania usług Windows. Możesz wstawić #if DEBUG, aby rozpocząć proces ręcznie, więc nie musisz instalować usługi i dołączać do niej w celu debugowania.
- 1. Kiedy #if DEBUG działa
- 2. Dlaczego ktoś miałby używać dyrektywy preprocesora #if 1 C?
- 3. Czy makra preprocesora C mogą zawierać dyrektywy preprocesora?
- 4. Co to są podzielniki i kiedy ich użycie jest konieczne?
- 5. Co to jest użycie Assert.Equals?
- 6. Co to jest użycie e.consume() w java
- 7. #ifdef DEBUG kontra #if DEBUG
- 8. Gdzie jest legalne określenie dyrektywy preprocesora?
- 9. Kiedy musimy używać sprawdzonego operatora w C#?
- 10. Co to jest użycie @SuppressWarnings
- 11. #if debug -> #if myOwnConfig?
- 12. Co to jest bajt datatype i kiedy powinienem go użyć?
- 13. Co to jest użycie funkcji c_str W języku C++
- 14. co to jest Request.InputStream i kiedy go użyć?
- 15. Co to jest __declspec i kiedy należy go użyć?
- 16. Co to jest odpowiednik Swift obiektu Objective-C "#ifdef __IPHONE_11_0"?
- 17. C++, używająC#if TRUE warunkowej dyrektywy
- 18. Co to jest "==" w C?
- 19. Co to jest Mutex i semafor wC#? gdzie musimy wdrożyć?
- 20. Co oznacza ta linia preprocesora C/C++?
- 21. Kiedy użyć tego w javascript OO?
- 22. Defines.Debug vs #if DEBUG
- 23. Co to jest użycie stałego obiektu związku?
- 24. Co to jest dobre użycie operatora is-
- 25. Co to jest skrótu javascript dla tego?
- 26. Co to jest użycie data-role = "fieldcontain"?
- 27. Co to jest typ zerowy w języku C#?
- 28. Co oznacza ## dla preprocesora C (C++)?
- 29. Co to jest odpowiednik dyrektywy, kompilować (pre/post) w TypeScript?
- 30. Błędy SWIG z powodu dyrektywy preprocesora
lub po prostu nie pokazać ekran powitalny podczas debugowania , oszczędzając sekundę lub dwie. Takie rzeczy. – TomTom
@TomTom: a może nie wyświetlasz ekranu powitalnego * kiedykolwiek *? – MusiGenesis