2010-07-27 4 views
2

J'écris un code C# assez complexe. Je trouve que mon code lève une exception (notée dans la fenêtre de sortie) mais le débogueur n'introduit pas. J'ai des ensembles d'exceptions pour casser les exceptions CLR non gérées par l'utilisateur.Recherche du gestionnaire d'exception C#

Puisque le débogueur ne s'ouvre pas, je suppose qu'il doit y avoir un try {} quelque part dans la pile d'appels.

Le problème est que je ne le trouve pas. Comment trouver le gestionnaire d'exception pour cette ligne de code qui déclenche une exception?

+0

Est-ce le code Windows Forms? WPF? Console? –

Répondre

3

Ouvrez la fenêtre des exceptions dans Visual Studio. Développez l'arborescence appropriée pour trouver l'exception qui est levée et cochez la case "Jeté". La prochaine fois que cette exception est lancée en mode débogage (vice non pris en compte), le débogueur sera immédiatement interrompu.

2

Vérifiez la trace afin que vous puissiez voir d'où l'exception est levée.

2

Définir des exceptions pour interrompre lancer Déboguer -> Exceptions à la boîte de dialogue 'Exceptions' et ensuite 'Exceptions au Common Language Runtime' cocher la case 'Thrown'.

Ceci s'arrêtera dès que TOUTE exception sera levée.

Vous trouverez peut-être un nombre surprenant d'exceptions sont levées dans le cadre de votre exécution de code « normal » (des choses comme des exceptions socket ou Parse exceptions lorsque votre interface utilisateur est databinding) auquel cas, mettez hors la « pause sur un jet 'case à cocher et placez un point d'arrêt près de votre code incriminé. Déboguez sur le point d'arrêt, puis basculez sur la relance et continuez le débogueur.

0

Vous pouvez essayer d'intercepter le niveau d'application. Il suffit d'ajouter à votre méthode principale code suivant:

Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 

Et gérer tous expections en méthode suivante:

 static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 
    { 
     //Log Excpetion or place breakpoint 
    } 

Si vous placez un point d'arrêt dans le gestionnaire vous pourrez voir StackTrace d'une exception.

Espérons que cela aide. Où se trouve l'exception dans le code?

+0

Cela ne va pas aider, le plus probable. Son application ne plante pas, ce qui est bon pour. – Will

+0

Ouais, vous pourriez avoir raison :) –

Questions connexes