98 votes

Don ' débogueur arrêt t à cette exception lorsqu’il ' s levée et pris

Dans outils/exceptions, j’ai mis l’option que le débogueur s’arrête lorsqu’une exception est levée. S’il est pris ou non.

Comment pour exclure une exception de cette règle ? Quelque part dans mon code il y a une exception interceptée qui s’inscrit dans la logique de programme. Donc j’ai évidemment ne veux pas cette exception pour arrêter le débogueur chaque fois qu’il est frappé.

Exemple : Je veux ignorer l’exception nullreference (ce qui est prise) sur la ligne 344. Je veux arrêter à tous les autres exceptions

70voto

Shimmy Points 23393

DebuggerHidden est votre ami!

Le common language runtime attache aucune sémantique de cet attribut. Il est prévu pour une utilisation par le code source des débogueurs. Par exemple, le débogueur Visual Studio 2005 ne s'arrête pas à une méthode annotée avec cet attribut et ne permettent pas un point d'arrêt est défini dans la méthode. D'autres débogueur attributs reconnus par le débogueur Visual Studio 2005 sont les DebuggerNonUserCodeAttribute et la DebuggerStepThroughAttribute.

Testé sur VS2010 et fonctionne très bien.

Alors qu' DebuggerStepThrough semble également fonctionner pour certaines versions de débogage, DebuggerHidden semble fonctionner pour un large éventail de situations sur la base des observations pour les deux réponses.

Notez que les deux options ne fonctionnent actuellement pas avec itérateur bloc de méthodes ou pour async/await méthodes. Cela pourrait être corrigé dans une prochaine mise à jour de Visual Studio.

42voto

Chris Chou Points 442

Si je me souviens bien, vous pouvez utiliser un `` attribut sur la méthode qui contient le code que vous ne voulez pas exception au feu. Je suppose que vous pouvez isoler le code qui déclenche l’exception ennuyeux dans une méthode et décorez avec l’attribut.

14voto

Valery Letroye Points 358

DebuggerStepThrough est le seul à être utilisé pour prévenir le débogueur de briser dans une méthode où il y a un try/catch.

Mais il ne fonctionne que si vous n'avez pas de décocher l'option "Activer uniquement Mon Code (Géré Uniquement)" dans les paramètres Généraux de l'Visual Studio Options de Débogage de l' (menu Outils/Options, nœud de Débogage/Général)...

Plus d'info à propos de cet attribut sur http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/

DebuggerHidden sera tout simplement empêcher le Débogueur pour afficher la méthode où l'exception est levée. Au lieu de cela, il va montrer la première méthode sur la pile, ce qui n'est pas marquée avec l'attribut...

12voto

Brian Rasmussen Points 68853

Dans Visual Studio, vous pouvez spécifier exactement quelles exceptions que vous souhaitez mettre un terme sur. Aller à Debug > Exceptions et fold out la branche pertinente. De là vous pouvez cocher/décocher de les exceptions que vous voulez.

3voto

Lars Udengaard Points 797

Vous n'êtes pas en mesure de distinguer une exception à un endroit spécifique dans votre code. Vous pouvez toutefois désactiver les exeptions d'un type spécifique.

Si votre propre code lève l'exception en question, je voudrais faire une exception personnalisée, dérivées de tout ce qui s'inscrit, puis désactiver le débogage de rupture sur ce type dérivé.

La désactivation du système d'exeptions comme NullReferenceException va affecter l'ensemble du système, ce qui bien sûr n'est pas souhaitable au cours du développement.

Notez qu'il existe deux types de comportements pour les exceptions:

  • Jeté: Si cette option est sélectionnée, les pauses dès que une exception de ce type est levée
  • L'utilisateur non gérée: Si cette option est sélectionnée, les pauses seulement si l'exception de ce type, n'est pas géré par un try/catch.

Vous pouvez supprimer le vérifier dans "Jeté" pour le NullReferenceException qui vous donnera l'avantage de ne pas casser à chaque fois que votre système passe la ligne en question dans votre code, mais encore la rupture, si vous avez quelques non gérée NullReference exception survenant dans d'autres parties du système.

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