Come si inserisce una condizione "IF DEBUG" nel programma aC# in modo che, in fase di esecuzione, ignorerà un set di codice se si sta eseguendo in modalità Debug e ancora, eseguire un blocco di codice se il programma non è funziona in modalità di debug? Una situazione in cui questo può essere utilizzato è se un timestamp è preso all'inizio di un blocco e un altro timestamp è preso alla fine. Non saranno molto diversi in fase di esecuzione. Tuttavia, se si passa attraverso il codice in modalità di debug, sarà molto diverso, e le condizioni di errore in un "se block" potrebbero essere avviate portando a un'esecuzione prematura (pun) di un certo codice.Come si inserisce una condizione "IF DEBUG" in un programma C#?
risposta
Basta mettere il codice in un blocco come questo:
#IF DEBUG
//code goes here
#endif
questa non è una cosa runtime, questa è una direttiva del preprocessore, il che significa che il codice in quel blocco non sarà nemmeno essere compilato e volontà non essere incluso
Se si desidera controllare in fase di esecuzione, se siete il debug, è possibile controllare Debugger.IsAttached
Utilizzare la #if istruzioni preprocessore:
#if debug
// run in debug mode
#else
// run if not in debug mode
#endif
non funziona vedere OP ... in modo che, in fase di esecuzione ... – KevinDTimm
#if DEBUG
// something
#elif
// some other thing
#endif
non funziona vedere OP ... in modo che, in fase di esecuzione ... – KevinDTimm
@KevinDTimm: Ah, perso quel punto. Non mi importa, ho appena dato le risposte sbagliate – simendsjo
È anche possibile utilizzare il
[Conditional("Debug")]
attributo sui metodi.
non funziona vedere OP ... in modo che, in fase di esecuzione ... – KevinDTimm
#if (DEBUG)
...
#else
...
#endif
vedere qui: http://bloggingabout.net/blogs/rick/archive/2005/03/10/2396.aspx
non funziona vedere OP ... in modo che, in fase di esecuzione ... – KevinDTimm
@KevinDTimm: Anche se l'interrogante dice "in fase di esecuzione", non vedo perché il suo scenario specifico non possa essere trattato dalla direttiva del preprocessore. Sembra che voglia saltare le cose 'if (ItTookALongTime)' quando si esegue in modalità debug, dal momento che in modalità debug ci aspettiamo che ci voglia un po 'di tempo ... quindi perché non assicuratevi che la roba 'if (ItTookALongTime)' è escluso quando compiliamo per il debug? –
perché non è quello che chiedeva :) voleva un modo per attivare un flag per scopi di debug, questo potrebbe altrettanto facilmente essere un modo (in futuro) per attivare la registrazione (per esempio). – KevinDTimm
un altro paio di dettagli:
- Puoi avvolgere un intero metodo o solo un blocco di codice o semplicemente una riga di codice.
- è necessario aggiungere
using System.Diagnostics;
l'unica risposta che risolve la domanda – KevinDTimm
Dal momento che ogni altra risposta (ma) non rispondere alla sua domanda, mi permetta di provare:
Se si desidera avere un interruttore di runtime, avrete bisogno di un modo per ottenere le informazioni dal proprio ambiente o dalla riga di comando. Inoltre, una volta ricevute queste informazioni, dovrai applicarle al tuo programma.
1) Per questo avrete bisogno di una variabile globale.
bool bDebug;
2) ottenere le informazioni di debug
bDebug = strcmp (getEnv ("DebuggingMode"), "1"); // you'll need to mess with this a little - do 'man getenv' and 'man strcmp' for an understanding of what I'm doing
- o -
utilizzare la funzione getopt()
per scoprire se il debug è spento o in
3) ogni inserire il codice che si desidera attivare il debug, verificare se bDebug è set
if (bDebug) {
// do something
}
+1 per il bit "runtime" – Earlz
Su 'Debugger.IsAttached', credo che sarà vero se si sta eseguendo il debug remoto su un sito di produzione. Sì, lo so che di solito non vuoi farlo, ma in alcuni casi limite in cui non riesci a capire cosa c'è che non va. Assicurati che il tuo codice di "debug" non causi problemi in un ambiente di produzione se usi il debug remoto. –
+1 @Nelson: debug remoto (allegando un debugger) è l'unico modo per eseguire il debug di un servizio di Windows. –