2009-05-21 8 views
5

Je veux que le concepteur attrape l'erreur lorsque je débogue et que l'utilisateur voit mon message si une erreur se produit pour lui. Je sais que je peux acomplish ce qui suit:Y at-il un meilleur moyen d'ignorer try/catch en mode débogage

#If Debug=False Then 

Try 

#End If 

'some code here 

#If Debug=False Then 

Catch ex as exception 

    Messagebox.Show("Errors suck") 

End Try 

#End If 

Je ne veux pas avoir à écrire tous les #statements et les avoir encombrent mon code. Il semble que ce devrait être un besoin commun et il doit y avoir un meilleur moyen. Est-ce que quelqu'un sait un meilleur moyen?

+0

Avez-vous déjà résolu ce problème avec succès? Avez-vous encore besoin d'aide pour cela? – jcolebrand

Répondre

0

Dans la section catch de votre Try..Catch, vous devez écrire le message d'exception, stacktrace et tout ce que vous voulez dans un fichier journal. Vous pouvez également écrire ces données dans le journal des événements Windows. Au pire, vous pourriez simplement mettre des points d'arrêt dans la section Catch de vos blocs Try..Catch, puisque vous ne devriez normalement pas les toucher, cela ne devrait pas être un gros problème une fois l'installation terminée.

15

Dans VS.NET, vous pouvez indiquer si vous souhaitez que le débogueur se casse lorsqu'une exception est levée (pas seulement lorsqu'elle n'est pas gérée).

Regardez sur le débogage | Exceptions ... élément de menu (Ctl-Alt-E sur mes raccourcis clavier). Choisissez l'excepption qui vous intéresse, puis cochez la case "lancé" pour cette exception.

Vous pouvez cocher cette case à plusieurs niveaux (toutes les exceptions CLR, toutes les exceptions CLR dans un espace de noms donné, ou exceptions spécifiques)

3

Il n'y a pas de bonne façon de le faire pour ignorer une prise d'essai autre que ce tu as fait. Mais vous pouvez rendre le code un peu plus propre et obtenir essentiellement le même effet. Essentiellement, vous essayez d'empêcher l'exécution de l'action dans le bloc catch. Une meilleure façon de le faire est une méthode conditionnellement compilée.

Try 
... 
Catch ex As Exception 
    DebugLog(ex) 
    Throw 
End Try 

<Condition("DEBUG)> _ 
Public Sub DebugLog(ByVal ex As Exception) 
    Messagebox.Show("errors suck") 
End Sub 
0

Je remarque que vous n'avez jamais marqué quelque chose comme accepté ici. Avez-vous entendu parler de la programmation orientée aspect? C'est en fait semblable à quelque chose que je cherche à implémenter dans un nouveau projet, donc j'étais curieux si vous aviez fait autre chose avec ceci. Plus c'est une question d'un an ... vous avez peut-être fait quelque chose et échoué à un suivi.

Et puis il se lève sur moi que cela ressemble à la asker a fermé son compte ...

0

Voici comment je le fais:

Activé:

Try ' : Catch: End Try 
    doSomething 
    andSomeMore 
    etcEtc 
' Try 
Catch ex As Exception 
    handleException 
End Try 

Désactiver ci-dessus en supprimant les deux caractères de commentaire:

Try : Catch : End Try 
    doSomething 
    andSomeMore 
    etcEtc 
Try 
Catch ex As Exception 
    handleException 
End Try