4 votes

Débogage d'une exception qui n'arrive qu'à l'exe mais pas à l'IDE

Lors de la fermeture du formulaire principal de l'application (sur lequel j'ai appelé de nombreuses méthodes, etc.), si j'exécute mon application à partir de l'IDE et que je veux la fermer, tout va bien, mais si j'exécute simplement le fichier exe, une exception sera levée.

Comme je l'ai dit, lorsque je l'exécute à partir de l'IDE, tout va bien et aucune erreur ne se produit.

4voto

the_mandrill Points 12530

Je pense à deux choses à essayer :

  • Exécutez l'application en dehors de l'IDE, mais attachez-vous ensuite au processus. Il se peut qu'en démarrant à partir du débogueur, l'environnement soit différent d'une manière ou d'une autre.
  • Utilisez adplus (voir mon post précédent) aquí pour capturer le crash dump afin de pouvoir l'analyser plus tard

2voto

Jon Skeet Points 692016

Commencez par déterminer quelle est l'exception. Pouvez-vous déjà voir les détails de l'exception ? L'application vous offre-t-elle la possibilité de vous connecter au débogueur ? Pouvez-vous attraper l'exception et l'enregistrer ?

2voto

Hans Passant Points 475940

Attachez le débogueur après avoir démarré le programme. Cela garantit que les effets secondaires, comme le répertoire de démarrage, le processus d'hébergement et l'optimisation JIT ne peuvent pas être affectés par le débogueur.

Lancez votre programme. Outils + Attacher au processus.

1voto

Jon Cage Points 14126

J'ai une solution écrit en C++-CLI qui devrait être assez facile à porter en C#.

Si cela se produit dans la fonction principale elle-même, avez-vous essayé d'envelopper tout votre code dans un :

try
{
    main();
}
catch( System.Exception^ e)
{
    // do something
}

Toutes mes excuses pour l'aspect C++ de ma réponse - cela fait longtemps que je n'ai pas écrit en C# ;-)

1voto

icemanind Points 13724

Vous devriez être en mesure d'attacher un gestionnaire d'exception global :

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

Créez ensuite une fonction pour gérer l'exception :

private void Application_ThreadException(object sender,System.Thread.ThreadExceptionEventArgs e) {
    // Do whatever here
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X