Dans les outils / exceptions, j'ai défini l'option selon laquelle le débogueur s'arrête lorsqu'une exception est levée. Qu'il soit attrapé ou non.
Comment exclure une exception à cette règle? Quelque part dans mon code, il y a une exception interceptée qui fait partie de la logique du programme. Donc, je ne veux évidemment pas que cette exception arrête le débogueur chaque fois qu'il est touché.
Exemple: je veux ignorer l'exception de référence nulle (qui est interceptée) à la ligne 344. Je veux m'arrêter à toutes les autres exceptions
Réponses:
Si je me souviens bien, vous pouvez utiliser un
DebuggerStepThrough
attribut sur la méthode qui contient le code que vous ne voulez pas que l'exception se déclenche. Je suppose que vous pouvez isoler le code qui déclenche l'exception ennuyeuse dans une méthode et le décorer avec l'attribut.la source
DebuggerStepThrough
attribut n'affecte pas le comportement du débogueur avec les exceptions de première chance.DebuggerStepThrough
attribut n'a aucune signification pour le CLR. Il est interprété par les débogueurs. Il semble que cela ne fonctionne pas de manière fiable dans diverses circonstances, et celaDebuggerHidden
fonctionnera de manière fiable stackoverflow.com/a/3455100/141172DebuggerHidden
est votre ami!Testé sur VS2010 et fonctionne très bien.
Bien que
DebuggerStepThrough
semble également fonctionner pour certaines versions de débogueur spécifiques,DebuggerHidden
semble fonctionner pour un plus large éventail de situations en fonction des commentaires des deux réponses.Notez que les deux options ne fonctionnent actuellement pas avec les méthodes de bloc d'itérateur ou pour les méthodes async / await . Cela pourrait être corrigé dans une mise à jour ultérieure de Visual Studio.
la source
DebuggerHidden
...DebuggerStepThrough est celui à utiliser pour empêcher le débogueur d'interrompre une méthode où il y a un try / catch.
Mais cela ne fonctionne que si vous n'avez pas décoché l'option "Activer juste mon code (géré uniquement)" dans les paramètres généraux des options de débogage de Visual Studio (menu Outils / Options, nœud Débogage / Général) ...
Plus d'informations sur cet attribut sur http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
DebuggerHidden empêchera simplement le débogueur d'afficher la méthode où l'exception est levée. Au lieu de cela, il affichera la première méthode de la pile qui n'est pas marquée avec cet attribut ...
la source
Les attributs spécifiés dans les autres réponses (et d'autres tels que l'
DebuggerNonUserCode
attribut) ne fonctionnent plus de la même manière par défaut dans Visual Studio 2015. Le débogueur se cassera sur les exceptions du marché des méthodes avec ces attributs, contrairement aux anciennes versions de VS. Pour désactiver l'amélioration des performances qui a modifié leur comportement, vous devez modifier un paramètre de registre:Plus d'informations peuvent être trouvées sur le blog de Visual Studio .
(Cela devrait probablement être un commentaire sur la réponse principale mais je n'ai pas assez de représentants)
la source
Vous ne pouvez pas distinguer une exception lancée à un endroit spécifique de votre code. Vous pouvez cependant désactiver les exeptions d'un type spécifique.
Si votre propre code lève l'exception en question, j'en ferais une exception personnalisée, dérivée de ce qui convient, puis désactiverais la rupture de débogage sur ce type dérivé.
La désactivation des exeptions système comme NullReferenceException affectera l'ensemble du système, ce qui n'est bien sûr pas souhaitable pendant le développement.
Notez qu'il existe deux types de comportements de rupture pour les exceptions:
Vous pouvez supprimer l'archivage `` Thrown '' pour NullReferenceException, ce qui vous donnera l'avantage de ne pas casser à chaque fois que votre système passe la ligne en question dans votre code, mais toujours de casser si vous avez une attente de NullReference non gérée dans d'autres parties du système.
la source