Question

S'il vous plaît laissez-moi savoir quelles sont les mesures que je dois suivre lors de plantage de mon application et ferme montrant la boîte de dialogue contenant des boutons « Ne pas envoyer » et « Envoyer un rapport d'erreur ».

Qu'est-ce que je peux peut-être faire autre que de regarder l'observateur d'événements pour résoudre ce problème?

Merci

Était-ce utile?

La solution

  1. Vous pouvez ajouter un try/catch/finally construire autour du corps de votre méthode d'entrée de Main().

  2. Pour WinForms, vous pouvez ajouter un gestionnaire de ThreadException, juste avant Application.Run (), pour attraper les exceptions lancées dans l'interface utilisateur des gestionnaires d'événements WinForms:

    Application.ThreadException +=
       new ThreadExceptionEventHandler(Application_ThreadException);
    
  3. Toutes les autres exceptions non gérées peuvent être capturés à l'aide:

    AppDomain.CurrentDomain.UnhandledException +=
       new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    

    Mais il convient de mentionner que cela ne vous permet de vous connecter / signaler l'exception -. Vous ne pouvez pas empêcher l'application de fermer une fois que vous quittez ce gestionnaire finale

  4. Visual Studio

    peut également être configuré pour pause sur la première exception occasion et débogueurs externes (comme WinDbg avec SoS gérés extensions) peuvent intercepter les exceptions de première chance aussi ( http: //www.codeproject. com / KB / debug / windbg_part1.aspx ).

En outre, utiliser un cadre de l'exploitation forestière comme log4net pour ajouter la journalisation utile à votre application et vider les informations d'exception avant l'application se ferme.

Autres conseils

Demandez à vos utilisateurs si elles peuvent reproduire l'erreur et comment. Si vous pouvez reproduire l'erreur, exécutez dans le débogage dans Visual Studio et suivez les étapes pour provoquer l'accident. Visual Studio passe en mode de débogage où il attrape l'erreur. Forme là, vous serez en mesure de suivre la trace de la pile et voir ce que le code est à l'origine de l'erreur. Visual Studio rend le débogage assez facile la plupart du temps.

Idéalement, vous devriez utiliser une bibliothèque d'enregistrement tels que NLog ou log4net pour connecter des exceptions non gérées, et les exceptions en général, en les connectant votre code quand ils se produisent.

Il peut également aider à avoir différents niveaux de l'exploitation forestière dans votre application pour vous aider à traquer un problème quand il ne fonctionne pas sur votre machine de développement. Avec NLog vous pouvez laisser l'enregistrement dans votre code de production et activer / désactiver la sortie du journal par l'utilisation d'un fichier de configuration de l'enregistrement.

Je n'ai pas utilisé log4net donc je ne sais pas si elle a une fonction similaire.

« envoyer / ne pas envoyer » vous avez des erreurs ont tendance à se produire lorsqu'une exception non gérée dans un thread d'arrière-plan (le thread principal indique que continuer / quit dialogue .NET avec une trace de la pile).

Ajoutez un gestionnaire d'exception à la fonction de votre fil et connectez-vous à partir de là:

void RunMyThread()
{
    try
    {
        // background thread code
    }
    catch (Exception ex)
    {
        // Log the exception
    }
}

est très simplifiée et ne peut pas être la façon dont vous voulez gérer une exception. Mais nous espérons que cela vous faire bouger dans la bonne direction.

Utilisez WinDBG pour déboguer la question. Vous pouvez le faire casser (comme dans l'arrêt sur un point d'arrêt) lorsqu'une exception est levée, puis examiner les stacktrace ... objets du périmètre etc ...

Si cela se produit sur un site client, et pas facilement dans un débogueur reproductible de développeurs, vous pouvez faire du débogage post-mortem. J'aime utiliser Userdump pour recueillir un fichier de vidage de la mémoire (DMP). Puis-je utiliser windbg pour l'analyse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top