2010-07-02 4 views
6

Sparsi in tutto il progetto software su cui sto lavorando sono molte righe di codice che sono state scritte per scopi di debug e utilità. Prima di compilare il mio codice, voglio un modo per selezionare se questi blocchi di codice debbano o meno essere inclusi nella mia compilazione (qualcosa che non richiede la navigazione nel codice che commenta). Come posso fare questo?Come posso facilmente escludere determinate righe di codice da una compilazione?

Sono la programmazione in C# e utilizzando Microsoft Visual Studio 2010.

risposta

13

Pop [Conditional("DEBUG")] sui metodi che si desidera eseguire nella compilazione di debug. Vedi here per informazioni più dettagliate.

+1

+1. IMVHO, questo è il modo * più pulito *. – womp

+0

Non avevo familiarità con questo attributo di debug condizionale, molto lucido. – CrimsonX

+0

Stesso - non ne avevo sentito parlare. Bello! – RQDQ

7

Vorrei suggerire che racchiude i blocchi in #ifdef SOMETHING e #endif, e poi definendo SOMETHING nelle impostazioni di progetto quando si desidera includere quel blocco nella vostra compilazione .

7

Sono necessarie direttive di preprocessore o istruzioni di compilazione condizionale. Puoi leggere su di loro here.

Un esempio da questo link:

#define TEST 
using System; 
public class MyClass 
{ 
    public static void Main() 
    { 
     #if (TEST) 
      Console.WriteLine("TEST is defined"); 
     #else 
      Console.WriteLine("TEST is not defined"); 
     #endif 
    } 
} 

il codice viene compilato solo se TEST è definito nella parte superiore del codice. Molti sviluppatori usano #define DEBUG in modo che possano abilitare il codice di debug e rimuoverlo semplicemente alterando quella riga in alto.

+7

Se si utilizzano le configurazioni di build in Visual Studio, la configurazione di build di Debug (per impostazione predefinita) definisce DEBUG e la configurazione di build di rilascio no. Non c'è bisogno di definirli manualmente. – Toby

1

Se lo sono per il debug, allora l'unica soluzione accettabile è quello di circondare tale codice con:

#ifdef DEBUG 

#endif 

questo modo si garantisce che il codice è incluso quando si compila in modalità di debug ma escluso nella modalità di rilascio.

+1

Esistono sicuramente altre soluzioni accettabili. L'attributo condizionale fa la stessa cosa, e (almeno per me) sarebbe preferibile alle direttive, poiché nella mia esperienza, le direttive tendono a confondere con gli strumenti di analisi del codice di terze parti. – womp

1

Si consiglia di prendere in considerazione l'idea di spostare completamente queste funzioni di debug dalle classi, far sì che le classi "cambino forma" tra la modalità di debug e quella di rilascio possano essere un vero problema e possa essere difficile diagnosticare i problemi.

Si potrebbe considerare di creare un assembly "Debug" separato che contenga tutti gli helper di debugging, quindi accertarsi di poterlo escludere dalla soluzione e creare con successo senza di esso.

3

Considerare l'utilizzo di the Debug class per registrare in modo condizionale, affermare, ecc. Ci sono molti vantaggi a questo. È possibile scegliere di accedere (o meno) in fase di esecuzione. Ti limitano a (per lo più) azioni che non cambiano il comportamento, affrontando alcune delle preoccupazioni (valide) di @ STW. Consentono l'utilizzo di strumenti di registrazione di terze parti.