2008-09-18 9 views
4

Je rencontre un problème avec une application suspendue et me donne le message par défaut "Veuillez informer Microsoft de ce problème", au lieu de la boîte de dialogue "exception non gérée" dans le application.Une exception s'est produite Application.ThreadException et AppDomain.CurrentDomain.UnhandledException

Dans le code de l'application, Application.ThreadException et AppDomain.CurrentDomain.UnhandledException sont tous deux redirigés vers une méthode qui écrit un journal des erreurs sur le disque, enregistre une capture d'écran sur le disque et affiche une boîte de dialogue conviviale.

Mais lorsque cette erreur se produit, aucune de ces trois choses n'arrive. Tout ce que je reçois est ceci dans l'Observateur d'événements:

EventType clr20e3, P1 myapp.exe, P2 4.0.0.0, P3 47d794d4, P4 mscorlib, P5 2.0.0.0, P6 471ebc5b, P7 15e5, 27 P8, système P9 .argumentoutofrange, P10 NIL

Étant donné que l'erreur ne semble se produire que lorsque l'application a fonctionné pendant plusieurs heures, je me demande s'il ne s'agit pas d'un problème de fuite de mémoire. J'ai cherché un peu pour "clr20e3" mais seulement réussi à trouver des trucs ASP.Net. Mon application est Windows Forms (.Net 2.0) exe, en utilisant pas mal d'assemblys - à la fois en C# et en C++ non géré.

Je suppose que cela pourrait aussi être une erreur dans la méthode de gestion des erreurs - Comme certaines réponses le suggèrent, je peux essayer de me connecter au début du gestionnaire d'erreur (mais comme je le fais de toute façon) .

Toute aide pour résoudre ce problème serait très appréciée - que ce soit des solutions ou des suggestions pour savoir quelle est la cause première du problème. MISE À JOUR: La cause première du bogue d'origine était l'accès à un tableau avec un index négatif (c'était le system.argumentoutofrange). Pourquoi cela n'a pas été piégé est un peu un mystère pour moi, mais étant donné que les deux exceptions ont été envoyées au même code de manipulation, je me demande s'il n'y a pas eu une condition où (par exemple) les deux ont été invoqués (le fichier journal, par exemple)?

J'ai réussi à le prouver en effectuant un EventLog.WriteEntry avant toute chose dans le code de gestion des erreurs. Ayant maintenant ajouté un drapeau pour empêcher la ré-entrée dans la gestion des erreurs, je ne semble plus avoir de problème ...

+0

Attachez-vous à ThreadException avant d'appeler Application.Run dans Main()? – Will

Répondre

1

Juste tir dans le noir ici - est-il possible que le ArgumentOutOfRangeException est réellement lancé de votre exception gestionnaire?

En outre, vous n'avez pas indiqué quel type d'application est en question - Application.ThreadException affecte uniquement les threads WinForms, donc s'il ne s'agit pas d'une application graphique, il est inutile. (Voir la section des remarques dans le MSDN documentation)

1

Avez-vous vérifié si le ArgumentOutOfRangeException est lancé par votre gestionnaire lui-même? Il peut être utile de faire une simple écriture dans le journal des événements ou une trace à l'entrée de votre gestionnaire d'exceptions et de confirmer que vous l'avez réellement tapé.

Edit: Information écrit au journal des événements se trouve à:

http://support.microsoft.com/kb/307024

0

appelez-vous Application.Run() plus d'une fois? Cela montrera les mêmes symptômes que vous décrivez. Vous devez écrire une classe ApplicationContext personnalisée en tant que solution de rechange. Juste mes 0,02 $ ajustés pour l'inflation.

Questions connexes