2012-04-03 19 views
8

Gdy istnieją wywołania metod w kodzie źródłowym i kompiluję w trybie zwolnienia, czy kompilator generuje IL dla Debug.Assert(), mimo że nie jest wywoływany?Czy Debug.Assert generuje IL w trybie zwolnienia?

Jeden z naszych programistów dodał ostatnio Assert, który wyświetla informacje o naszych wewnętrznych zabezpieczeniach. Czy ktoś mógłby spojrzeć na tryb zwolnienia IL i dowiedzieć się, jaki jest tekst twierdzenia?

+0

Sprawdź moje [stary wpis blogu] (http (gdy DEBUG nie jest zdefiniowana.): //tjoe.wordpress .com/2007/12/03/cotw-conditionalattribute-class /), pamiętając o tym, że metody 'Debug' są ozdobione' [Warunkowe ("DEBUG")] '. – CodeNaked

Odpowiedz

9

Domyślnie jest to , a nie, chyba że zdefiniujesz symbol DEBUG (i domyślnie dla opcji Release, która jest wyłączona).

Aby to sprawdzić, otwórz Właściwości projektu i wybierz okienko Budowanie w Visual Studio. Zostanie wyświetlone pole wyboru "Define DEBUG constant". Jeśli jest on włączony w przypadku wydania, wtedy gwarancje zostaną uruchomione; w przeciwnym razie nie będą.

7

Nie, członkowie klasy Debug (z atrybutem ConditionalAttribute) nie emitują IL. Jest no explicit mention on MSDN jednak następujące dwa cytaty implikuje zachowanie całkiem dobrze, tak aby zwiększać Roya odpowiedź:

Jeśli używasz metody w klasie Debug wydrukować informacje debugowania i sprawdź swoją logikę z twierdzeń, można dokonać Twój kod więcej solidny, bez wpływu na wydajność i rozmiar kodu produktu wysyłkowego .

Tak, nie implikuje żadnej różnicy wielkości wyjściowe z nich w ogóle, a

Atrybut ConditionalAttribute jest stosowana do metod debugowania. Kompilatory obsługujące funkcję ConditionalAttribute ignorują wywołania metodami , chyba że "DEBUG" jest zdefiniowany jako symbol kompilacji warunkowej. Zobacz dokumentację kompilatora, aby ustalić, czy obsługiwana jest metoda warunkowaAttribute i składnia definicji warunkowego symbolu kompilacji .

co oznacza, że ​​na poziomie kompilatora, nie będzie nawet uznać te połączenia

+0

MSDN jawnie pokazuje atrybut na [dokumentacji poziomu metod] (http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx). Nie mówi, co robi atrybut, ale zawsze możesz przejrzeć dokumentację samego atrybutu. –

Powiązane problemy