2010-07-07 3 views
3

à la fermeture de la forme principale de l'application (que j'appelle tant de méthodes dessus, etc) si j'exécute mon application depuis IDE et que je veux la fermer, c'est ok mais si je viens de lancer le fichier exe Il va jeter une exception.Débogage d'une exception qui n'arrive qu'exe mais pas de l'IDE

alors de quelle façon me proposez-vous pour le déboguer? comme je l'ai dit quand je le lance depuis l'EDI, c'est OK et aucune erreur ne se produit

+1

Démarrer avec quelques commandes de débogage, bonne ol » états d'impression. C'est old school et un peu maladroit mais ça pourrait aider. Exécutez-le autour de quelques endroits où vous pensez que le problème pourrait se produire et voir quelles sortes de choses imprimées. – Kaili

+1

Il serait utile de nous dire ce qu'est l'exception. Full stacktrace préférable. –

Répondre

3

Deux choses que je peux penser à essayer:

  • Lancez l'application à partir de l'extérieur de l'IDE mais attache au processus. Il se pourrait que lors du démarrage du débogueur l'environnement sera différent d'une certaine façon
  • Utilisez adplus (voir mon précédent post here pour attraper le vidage sur incident afin que vous puissiez les analyser plus tard
1

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

Si ça se passe au sein de la principale fonction elle-même, avez-vous essayé envelopper tout votre code dans un:

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

Toutes mes excuses pour le C++ - ish-ness de ma réponse - il a été longtemps que je l'ai écrit any C# ;-)

2

Découvrez quelle est l'exception, pour commencer. Pouvez-vous déjà voir les détails de l'exception? Est-ce qu'il vous offre la possibilité de joindre au débogueur? Pouvez-vous attraper l'exception et l'enregistrer?

+0

Merci, attacher à la technique de processus travaillé, désolé j'ai dû accepter une autre réponse précédente qui propose également la technique Attacher au processus – Bohn

2

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

Démarrez votre programme. Outils + Attacher au processus.

+0

Merci, attacher à la technique de processus a travaillé, désolé j'ai dû accepter une autre réponse antérieure qui propose également la technique Attach To Process – Bohn

+0

Upvotes ont été difficiles à venir aujourd'hui, je suis en avance. –

1

Vous devriez être capable de joindre un gestionnaire d'exception global:

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

Et puis créez une fonction pour gérer l'exception:

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

Merci, la technique Attach To Process a fonctionné, désolé j'ai dû accepter une autre réponse antérieure qui propose également la technique Attach To Process – Bohn

+0

Cela semble intéressant. Quel est le meilleur endroit dans le code que je peux ajouter ceci? – Bohn

+0

Faites-le soit dans l'événement Load ou le constructeur – Icemanind

Questions connexes