76 votes

Le code source .NET peut-il coder en dur un point d'arrêt de débogage?

Je suis à la recherche d'un chemin dans .NET (2.0, C#, en particulier) pour le code source pour déclencher un débogage pause, comme si un point d'arrêt défini à ce point, sans avoir à retenir pour définir un point d'arrêt il y a dans le débogueur, et sans interférer avec la production de l'exécution.

Notre code doit avaler des exceptions dans la production, afin de ne pas perturber une application client qui a des liens avec nous, mais je suis en train de le configurer de sorte que de telles erreurs pop up afin d'être analysés si elle arrive à être en cours d'exécution dans un débogueur, et autrement ne peut être ignoré en toute sécurité.

Ma tentative d'utiliser Debug.Assert(false) a été moins que l'idéal, et je suppose qu' Debug.Fail() se comporterait de la même manière. Il devrait théoriquement avoir aucun effet dans la production, et il n'a réussi à s'arrêter quand le débogage, mais de par leur conception, il est (pour autant que je puisse dire) aucun moyen de poursuivre l'exécution si vous voulez ignorer cette erreur, comme vous pourriez, avec un point d'arrêt, et, comme il le ferait dans la production où nous avaler l'erreur. Elle aussi, apparemment, les sauts de l'évaluation de la variable d'état, car le débogueur s'arrête vers le bas dans le système natif de code et pas dans le nôtre, il est donc de débogage de l'aide est limitée. (Peut-être que je suis absent quelque sorte de revenir à des choses de regarder les variables et ainsi de suite, où il est arrivé. ???)

Je m'attendais à quelque chose comme Debug.Break(), mais il ne semble pas exister (sauf peut-être dans une version ultérieure .NET?), et aucun autre Debug méthodes semblent applicables, soit.

Mise à jour: Alors que ctacke réponse correspond le mieux à ce que je cherchais, depuis, j'ai aussi découvert un truc avec de Débogage.Assert()--lors de l'exécution dans le débogueur--Pause le débogueur, aller dans le code pour le Débogage.Affirmer appel en attente (mise en surbrillance en vert parce que c'est dans le cadre du code) et appuyez sur (shift + F11), puis appuyez sur Ignorer dans l'assertion de la boîte de dialogue. Cela laissera le débogueur en pause lors de la restitution de l'affirmer (et en mesure de poursuivre l'exécution comme si elle n'avait pas eu lieu, parce qu'il a été ignoré). Il peut y avoir d'autres façons de faire la même chose (ne frapper Réessayer de le faire plus directement?), mais cette façon intuitive.

137voto

ctacke Points 53946

Vous êtes probablement après quelque chose comme ça:

 if(System.Diagnostics.Debugger.IsAttached)
  System.Diagnostics.Debugger.Break();
 

Bien sûr, cela sera toujours compilé dans une version Release. Si vous voulez qu'il se comporte davantage comme un objet Debug dont le code n'existe tout simplement pas dans une version Release, vous pouvez faire quelque chose comme ceci:

 [Conditional("DEBUG")]
void DebugBreak()
{
  if(System.Diagnostics.Debugger.IsAttached)
    System.Diagnostics.Debugger.Break();
}
 

Ajoutez ensuite un appel dans votre code.

13voto

CheGueVerra Points 3580

Je suis tombé sur une situation une fois où cela n'a pas fonctionné

 System.Diagnostics.Debugger.Break();
 

mais cela a

 System.Diagnostics.Debugger.Launch();
 

12voto

shahkalpesh Points 21553

System.Diagnostics.Debugger.Break?

4voto

Lasse V. Karlsen Points 148037

Que diriez-vous simplement la configuration de Visual Studio pop up avec le débogueur, même si vous avalez?

Faire cela:

  • Aller à Déboguer->Exceptions...
  • Trouver de l'exception au droit, ou l'ajouter si c'est votre propre
  • Cochez la case "Jeté" case à cocher pour l'exception

Cela va arrêter de Visual Studio sur l'emplacement de cette exception est levée, et pas seulement si elle n'est pas traitée.

Vous pouvez voir plus d'informations ici.

4voto

Une astuce intéressante que j'ai trouvée consiste à placer Debugger.Break () dans le ctor de votre exception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X