2010-06-16 6 views
5

Comment mettre une condition "IF DEBUG" dans le programme aC# afin que, lors de l'exécution, il ignore un ensemble de code si vous exécutez en mode Debug et pourtant, exécutez un bloc de code si le programme n'est pas en cours d'exécution en mode débogage? Une situation où ceci peut être utilisé est si un horodatage est pris au début d'un bloc et un autre horodatage est pris à la fin. Ils ne différeront guère au moment de l'exécution. Cependant, si vous passez en revue le code en mode débogage, ils seront très différents, et les conditions d'erreur dans un "if block" pourraient être éjectées, conduisant à l'exécution prématurée (pun) d'un code.Comment mettre une condition "IF DEBUG" dans un programme C#?

Répondre

15

Vous venez de mettre votre code dans un bloc comme celui-ci:

#IF DEBUG 

//code goes here 

#endif 

Ce n'est pas une chose d'exécution, ceci est une directive préprocesseur, ce qui signifie que le code dans ce bloc ne sera pas même compilé et la volonté ne pas être inclus.

Si vous voulez vérifier lors de l'exécution si vous le débogage, vous pouvez vérifier Debugger.IsAttached

+2

+1 pour le bit "runtime" – Earlz

+2

On 'Debugger.IsAttached', je crois que ce sera le cas si vous faites du débogage à distance sur un site de production. Oui, je sais que vous ne voulez généralement pas faire cela, mais dans certains cas où vous ne pouvez pas comprendre ce qui ne va pas, cela peut aider. Assurez-vous simplement que votre code de "débogage" ne causera pas de problèmes dans un environnement de production si vous utilisez le débogage à distance. –

+0

+1 @Nelson: Le débogage distant (attacher un débogueur) est le seul moyen de déboguer un service Windows. –

5

Utilisez le #if instruction préprocesseur:

#if debug 
    // run in debug mode 
#else 
    // run if not in debug mode 
#endif 
+0

ne fonctionne pas voir OP ... de sorte que, au moment de l'exécution ... – KevinDTimm

0
#if DEBUG 
     // something 
#elif 
     // some other thing 
#endif 
+0

ne fonctionne pas voir OP ... de sorte que, au moment de l'exécution ... – KevinDTimm

+0

@KevinDTimm: Ah, manqué ce point. Ne me dérange pas, je donne juste les mauvaises réponses – simendsjo

3

Vous pouvez également utiliser le

[Conditional("Debug")] 

attribut sur les méthodes.

+0

ne fonctionne pas voir OP ... de sorte que, au moment de l'exécution ... – KevinDTimm

0
#if (DEBUG) 
... 
#else 
... 
#endif 

voir ici: http://bloggingabout.net/blogs/rick/archive/2005/03/10/2396.aspx

+0

ne fonctionne pas voir OP ... de sorte que, lors de l'exécution ... – KevinDTimm

+0

@KevinDTimm: Bien que l'interrogateur dise "au moment de l'exécution", je ne vois pas pourquoi son scénario spécifique ne pouvait pas être traité par la directive du préprocesseur. Il semble qu'il veut ignorer le truc 'if (ItTookALongTime)' en mode débogage, car en mode débogage, nous attendons que ça prenne du temps ... alors pourquoi ne pas vérifier le 'if (ItTookALongTime)' est exclu lorsque nous compilons pour le débogage? –

+0

parce que ce n'est pas ce qu'il a demandé :) il voulait un moyen d'activer un drapeau à des fins de débogage, cela pourrait tout aussi bien être un moyen (à l'avenir) d'activer la journalisation (par exemple). – KevinDTimm

1

Un couple plus de détails:

  • Vous pouvez envelopper une méthode entière ou juste un bloc de code ou juste une ligne de code.
  • Vous devez ajouter using System.Diagnostics;
+0

la seule réponse qui répond à la question – KevinDTimm

0

Comme toute autre réponse (mais) ne répond pas à votre question, je vais essayer:

Si vous souhaitez avoir un commutateur d'exécution, vous aurez besoin d'un façon d'obtenir les informations de votre environnement ou de la ligne de commande. De plus, une fois que vous obtenez cette information, vous devrez l'appliquer à votre programme.

1) Pour cela, vous aurez besoin d'une variable globale.

bool bDebug; 

2) obtenir les informations de débogage

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 
  • ou -

utiliser la fonction getopt() pour savoir si le débogage est désactivé ou

3) tous les placez dans votre code que vous voulez que le débogage soit activé, vérifiez si bDebug est set

if (bDebug) { 
    // do something 
    } 
Questions connexes