6
votes

Ignorer sélectivement les exceptions levées dans le code C #

J'ai une fonction dans le code C # où une nullreferenceException est lancée périodiquement (comportement attendu), mais attrapé. Existe-t-il une façon de dire au débogueur Visual Studio de ne pas rompre à cette exception pour cette section particulière de mon code?

modifier J'ai besoin de casser cette exception ailleurs dans mon code, mais pas dans la même fonction.


3 commentaires

Un bon moyen de le faire est de ne pas permettre que cela se produise. Pourquoi êtes-vous pas capable de l'empêcher?


Cela pourrait être un code externe en dehors de son contrôle


Ce n'est pas que je ne peux pas, c'est le code que j'ai hérité et que je n'essaie de ne pas trop toucher jusqu'à ce que je fixe certains des insectes qui le panguient. Fondamentalement, j'ai des corrections rapides que j'ai besoin de sortir avec les clients avant d'aller et de réécrire quoi que ce soit.


3 Réponses :


12
votes

Si je comprends bien et ce que vous essayez de faire est de déboguer une ou des nullreferenceException (s) NullReferenceException (s), mais veulent ignorer temporairement les autres lors du débogage, vous pourrez peut-être le faire en marquant les fonctions que vous souhaitez que le débogueur ignore avec le Attribut debuggernonusercode .

[DebuggerNonUserCode]
private void MyMethod()
{
    // NullReferenceException exceptions caught in this method will
    //  not cause the Debugger to stop here..
}


3 commentaires

Ceci est en fait parfait pour ce que je dois faire. Ce n'est pas un changement permanent, plus ou moins quelque chose pour m'aider à déboguer pour l'instant.


Ne fonctionne pas. - au moins pas dans VS 2015. - J'ai décoré une méthode avec ceci, l'exception est capturée et ne bouge pas, mais le débogueur s'arrête toujours là.


Assurez-vous d'activer l'option "juste mon code" dans VS> Outils> Options> Débogage> Général. L'annotation ne sera pas honorée si ce paramètre n'est pas activé.



0
votes

Vous pouvez le faire, mais il effectue toutes les exceptions dans la solution.

Débogou -> Exceptions -> Rechercher ... "NULL REF" , DÉCOT TICK.


1 commentaires

Encore une fois, il en a encore besoin de briser cette exception pour le reste de son code, il n'y a qu'un seul endroit où il veut l'ignorer.



2
votes

En supposant que l'exception ne bouille pas à l'appelant, cela peut être obtenu avec DEBUGGERHDITHENDITHDITHENDATTRIBUT .

des remarques

Le débogueur Visual Studio 2005 ne s'arrête pas dans une méthode marquée de Cet attribut et ne permet pas de définir un point d'arrêt dans le Méthode. xxx


3 commentaires

Pour ce que je tente de faire, quelle est la différence entre la spécification de l'attribut [debuggernonuserercode] et de l'attribut [DebuggerHidden]?


@Basedasfunk - Clarté. Si vous cachez du code parce que c'est généré et ne doit pas être examiné par l'utilisateur final, puis debuggernonuserercode identifie cette intention. Toutefois, si vous souhaitez avoir une fonction ignorée par le débogueur, alors déboggerHidden identifie cette intention.


Ne fonctionne pas. Le débogueur arrête simplement un niveau. L'exception ne bouillonne pas, il est attrapé, mais le débogueur se comporte comme si cela le faisait. (Et quand vous étape, vous pouvez clairement voir que cela ne bouclait pas, mais la pause se produit toujours. - Très gênant.)