9
votes

Pourquoi mon bloc de capture fonctionne-t-il que lors du débogage dans Visual Studio?

code dans programme.cs xxx

dans form1 J'ai un bouton avec le code lancer une nouvelle exception (""); . > Si j'exécute l'application de Visual Studio, ma Messagebox apparaît (avec message 'bla ...'). Mais si j'exécute l'application du fichier exécutable, le bloc de capture n'exécute pas du tout.

Pourquoi la différence?

J'utilise Visual Studio 2010, .NET 4.0,. Windows XP.


2 commentaires

Que se passe-t-il lorsqu'il est arrivé à l'extérieur vs? Que se passe-t-il si vous appuyez sur CTRL + F5? (Courir sans débogage)


Réponse courte, incomplète: des choses se produisent différemment tout en débogage. Voir cette question pour ce que vous devrait faire: Stackoverflow.com/Questtions/1601372/...


3 Réponses :


-1
votes

Parce que dans Libération MODE Au moment où la boîte de message doit être affichée que l'appanchie Yuo're va être "morte" et vous ne pouvez pas l'arrêter en affichant MessageBox. Dans Débogou en mode vs se soucie de cela et pauses sur la ligne qui jette une exception.

Cordialement.


10 commentaires

@Slaks: Quelle est l'erreur ici?


Tout. Aucune partie de votre réponse n'est vraie.


Désolé gars, mais la question ici n'est pas ce qu'il devrait faire, mais pourquoi la boîte de message ne figure pas dans la version en présentant ce code. Si vous avez une réponse précise complète à cela, je serai heureux de le lire. Salutations.


@Slaks: avec tout respect, mais expliquez au moins pourquoi. Ou ajouter une réponse afin que les gens puissent comprendre.


1) Il n'exécute pas le mode de sortie. 2) attrape Les blocs fonctionnent bien en mode de libération 3) vs ne casse pas en mode débogage; Il voit la messagerie MessageBox 4) Le problème réel est le gestionnaire d'exception non géré par défaut, qui ne fonctionne pas lorsque le débogueur est attaché.


@Slaks: En disant la libération, je veux dire des fichiers binaires de sortie. Ok je vais mettre à jour mon post.


Je connais. Il n'est pas En cours de vente binaires de sortie. Cela ne rend pas votre réponse moins mal.


OK j'ai compris. Mais, honnêtement, il est impossible et potentiellement possible que si elle gère la libération, au moins une différence :) Cordialement.


De plus, peu importe si elle est compilée en mode de débogage ou de libération, le problème reste le même.


@sven: C'est clairement, il suffit de l'essayer dans le code. Parce que la question concerne la boîte de message. Essayez-le et seulement après la bowevote.



-1
votes

Je ne vois pas pourquoi cela se passe mais essayez de reconstruire la solution, en cas de doute que je le fais toujours. Il peut ne pas résoudre ou non le problème et vous avez probablement déjà essayé, mais si vous ne l'avez pas fait, cela peut le réparer pour vous.


0 commentaires

16
votes

En effet, la gestion des exceptions standard pour une application Formulaires Windows se comporte différemment lorsque le débogueur Visual Studio est connecté - Normalement, le gestionnaire d'exception intégré à la méthode Application.run attribue des exceptions non gérées afin qu'elle puisse Faites des choses comme montrer la boîte de dialogue suivante:

Si cela permettait à l'exception d'être jeté à l'extérieur de la méthode Application.run , il empêcherait que l'application continue de continuer si l'utilisateur appuie sur "Continuer" (car la capture est en dehors de la pompe de message ).

Lors du débogage, il est désactivé, probablement de sorte que le débogueur passe directement en mode de débogage sur une exception non gérée plutôt que la boîte de dialogue ci-dessus.

Si vous souhaitez gérer des exceptions non gérées dans votre application Windows Forms, vous devez gérer le application.threadexception événement . Sinon, vous pouvez modifier ce comportement avec le Application.setUnhandleXceptionMode Méthode .

Vous n'êtes en aucun cas seul à être confondu par ceci:


0 commentaires