Ne pas arrêter le débogueur à cette exception quand il est lancé et attrapé

Dans les outils / exceptions, j’ai défini l’option que le débogueur s’arrête lorsqu’une exception est levée. Que ce soit attrapé ou non.

Comment exclure une exception de cette règle? Quelque part dans mon code, il y a une exception qui fait partie de la logique du programme. Donc, évidemment, je ne veux pas que cette exception arrête le débogueur chaque fois qu’il est atteint.

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

Si je me souviens bien, vous pouvez utiliser un atsortingbut DebuggerStepThrough sur la méthode qui contient le code que vous ne souhaitez pas que l’exception 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’atsortingbut.

DebuggerHidden est votre ami!

Le Common Language Runtime n’attache aucune sémantique à cet atsortingbut. Il est fourni pour être utilisé par les débogueurs de code source. Par exemple, le débogueur Visual Studio 2005 ne s’arrête pas dans une méthode marquée avec cet atsortingbut et ne permet pas de définir un point d’arrêt dans la méthode. Les autres atsortingbuts du débogueur reconnus par le débogueur Visual Studio 2005 sont DebuggerNonUserCodeAtsortingbute et DebuggerStepThroughAtsortingbute.

Testé sur VS2010 et fonctionne très bien.

Bien que DebuggerStepThrough semble également fonctionner avec certaines versions spécifiques du débogueur, DebuggerHidden semble fonctionner dans un large éventail de situations en fonction des commentaires apportés aux deux réponses.

Notez que les deux options ne fonctionnent pas actuellement avec les méthodes de bloc d’ itération ou pour les méthodes asynchrones / d’attente . Cela pourrait être résolu dans une mise à jour ultérieure de Visual Studio.

DebuggerStepThrough est celui qui doit être utilisé pour empêcher le débogueur de rompre 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 parameters généraux des options de débogage de Visual Studio (menu Outils / Options, débogage du noeud / Général) …

Plus d’infos sur cet atsortingbut sur http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-atsortingbute/

DebuggerHidden empêchera simplement le débogueur d’afficher la méthode où l’exception est levée. Au lieu de cela, il montrera la première méthode sur la stack qui n’est pas marquée avec cet atsortingbut …

Les atsortingbuts spécifiés dans les autres réponses (et d’autres comme l’atsortingbut DebuggerNonUserCode ) ne fonctionnent plus de la même manière par défaut dans Visual Studio 2015. Le débogueur ne respecte pas les exceptions dans les méthodes commercialisées avec ces atsortingbuts, 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:

 reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1 

Plus d’informations peuvent être trouvées sur le blog du studio visuel .

(Cela devrait probablement être un commentaire sur la première réponse, mais je n’ai pas assez de représentant)

Vous ne pouvez pas isoler une exception lancée à un endroit spécifique dans votre code. Vous êtes toutefois en mesure de désactiver les exeptions d’un type spécifique.

Si votre propre code lève l’exception en question, je ferais une exception personnalisée, dérivée de tout ajustement, puis désactivez la coupure de débogage sur ce type dérivé.

La désactivation des exceptions système comme NullReferenceException affectera l’ensemble du système, ce qui n’est évidemment pas souhaitable pendant le développement.

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

  • Lancer: Si sélectionné, se casse dès qu’une exception de ce type est levée
  • User-Unhandled: Si cette option est sélectionnée, elle ne se rompt que si l’exception de ce type n’est pas gérée par un try / catch.

Vous pouvez supprimer la coche ‘Thrown’ pour l’Exception NullReference qui vous donnera l’avantage de ne pas se casser à chaque fois que votre système transmettra la ligne en question dans votre code, mais toujours si vous avez une expression NullReference non gérée système.