7
votes

Comment mettez-vous une condition «si déboguise» dans un programme C #?

Comment mettez-vous une condition "si déboguise" dans le programme AC # de sorte que, au moment de l'exécution, il ignorera un ensemble de code si vous exécutez en mode de débogage et que vous exécutez un bloc de code si le programme est Ne pas courir en mode de débogage? Une situation dans laquelle cela peut être utilisé est si un timbre de temps est pris au début d'un bloc et un autre timbre de temps est pris à la fin. Ils vont à peine différer au moment de l'exécution. Pourtant, si vous entrez dans le code du mode de débogage, ils différeront beaucoup, et des conditions d'erreur dans un "SI BLOCK" pourraient être expulsées menant à l'exécution inattendue (Pun) de certains code.


0 commentaires

7 Réponses :


16
votes

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

#IF DEBUG

//code goes here

#endif


5 commentaires

Sur débogueur.isattached , je pense que ce sera vrai 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 de bord où vous ne pouvez pas comprendre ce qui ne va pas, cela peut aider. Assurez-vous simplement que votre code «débogage» ne causera pas de problèmes dans un environnement de production si vous utilisez du débogage à distance.


+1 @nelson: Débogage à distance (attacher un débogueur) est le seul moyen de déboguer un service Windows.


@Snorfus - En fait, ce n'est pas complètement vrai. :) Je ne trouve pas le code maintenant (que j'ai copié d'un site Web), mais j'ai un service mis en place d'une manière que si je choisis la construction "Debug", il fonctionne à l'intérieur de Visual Studio avec une capacité de débogage normale. Si je choisis "Libération", il construit le service installable normal qui ne peut être débogué que avec le débogage à distance. Si vous souhaitez déjà qu'un service fonctionne avec des symboles de débogage, je suppose que vous pouvez créer une nouvelle configuration de construction (service de débogage-normal).


@Nelson: Très intéressant, si vous pouvez trouver le code / article que j'aimerais voir (je vais commencer à me regarder moi-même). Je sortais de l'article MSDN ici: MSDN.MicRosoft. COM / EN-US / Bibliothèque / 7A50SYSB3 (vs.80) .aspx .


@Snorfus: Ouais, et normalement, vous ne pouvez pas le déboguer de cette façon, mais certaines personnes proposent des idées ingénieuses. Je pense qu'il s'agissait essentiellement d'une application de console et d'exécution manuelle sur placet (). Je devrais l'avoir d'ici demain.



5
votes

Utilisez l'instruction de préprocesseur #IF:

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


0 commentaires

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

1 commentaires

@Kevindtimm: Ah, a raté ce point. Ne vous dérange pas de moi, je donne juste les mauvaises réponses



5
votes

Vous pouvez également utiliser l'attribut xxx

sur les méthodes.


0 commentaires

0
votes
#if (DEBUG)
...
#else
...
#endif
see here: http://bloggingabout.net/blogs/rick/archive/2005/03/10/2396.aspx

2 commentaires

@Kevindtimm: Bien que le questionneur indique "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 veuille sauter sur le si (ittookalongtime) Stuff lors du mode de débogage, car dans le mode de débogage, nous nous attendons à ce que cela puisse prendre beaucoup de temps ... alors pourquoi ne pas simplement m'assurer que le Si (itookalongtime) est exclu lorsque nous compilons pour le débogage?


Parce que ce n'est pas ce qu'il a demandé :) Il souhaitait un moyen d'activer un drapeau à des fins de débogage, cela pourrait aussi facilement être un moyen (à l'avenir) pour activer la journalisation (par exemple).



1
votes

Quelques 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 à l'aide de System.Diagnostics;

1 commentaires

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



0
votes

Comme toutes les autres réponses (mais une) ne répondent pas à votre question, laissez-moi essayer:

Si vous souhaitez avoir un interrupteur d'exécution, vous aurez besoin d'un moyen d'obtenir les informations de votre environnement ou de la ligne de commande. . De plus, une fois que vous avez obtenu cette information, vous devrez l'appliquer à votre programme. P>

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

   if (bDebug) {
   // do something
   }


0 commentaires