2012-04-03 17 views
8

Quando le chiamate al metodo Debug.Assert() esistono nel codice sorgente e si compila in modalità di rilascio, il compilatore genera l'IL per lo Debug.Assert() anche se non viene chiamato?Debug.Assert genera IL in modalità di rilascio?

Uno dei nostri sviluppatori ha aggiunto recentemente una dichiarazione che mostra informazioni sulla nostra sicurezza interna. Qualcuno potrebbe guardare la modalità di rilascio IL e capire il testo per l'asserzione?

+0

controllare il mio [blog vecchio] (http (quando DEBUG non è definito.): //tjoe.wordpress .com/2007/12/03/cotw-condizionaleattributo-classe /), tenendo presente che i metodi 'Debug' sono decorati con' [Conditional ("DEBUG")] '. – CodeNaked

risposta

9

Fa non per impostazione predefinita, a meno che non si definisca il simbolo DEBUG (e, per impostazione predefinita, per Release disattivato).

Per verificare, aprire le proprietà del progetto e selezionare il riquadro Genera in Visual Studio. Mostrerà la casella "Definisci costante DEBUG". Se è attivato per il rilascio, gli attacchi si attivano; altrimenti, non lo faranno.

7

No, i membri della classe Debug (con l'attributo ConditionalAttribute) non emettono IL. C'è no explicit mention on MSDN, tuttavia i seguenti due citazioni implicano il comportamento abbastanza bene, in modo di aumentare la risposta di Roy:

Se si utilizzano i metodi della classe Debug per stampare le informazioni di debug e controllare la logica con asserzioni, si può fare il codice più robusto senza influire sulle prestazioni e sulla dimensione del codice del prodotto di spedizione .

Quindi, nessuna differenza di dimensioni implica alcuna uscita da queste qualunque e

L'attributo ConditionalAttribute viene applicato ai metodi di debug. I compilatori che supportano ConditionalAttribute ignorano le chiamate a questi metodi a meno che "DEBUG" non sia definito come un simbolo di compilazione condizionale. Fare riferimento alla documentazione di un compilatore per determinare se è supportato ConditionalAttribute e la sintassi per la definizione di un simbolo di compilazione condizionale .

Il che significa che, a livello di compilatore, saranno nemmeno prese in considerazione queste chiamate

+0

MSDN mostra esplicitamente l'attributo nella [documentazione a livello di metodo] (http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx). Non dice cosa fa l'attributo ma si può sempre cercare la documentazione sull'attributo stesso. –

Problemi correlati