2010-03-18 6 views
0

J'ai rencontré une exception dans notre application qui n'est pas traitée du tout. Je ne sais vraiment pas quoi chercher pour déboguer ce problème puisque l'application se ferme immédiatement quand cette exception particulière est lancée (même en cours d'exécution de VS). La gestion des exceptions est configuré de cette façon:AppDomain.CurrentDomain.UnhandledException ne démarre pas toujours

[STAThread] 
[LoaderOptimizationAttribute(LoaderOptimization.MultiDomainHost)] 
static void Main() 
{ 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
Application.ApplicationExit += new EventHandler(ApplicationExitHandler); 
Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionHandler); 
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler); 
... 

Le fil à partir de laquelle l'exception est levée commence de cette façon:

Thread executerThread = new Thread(new ThreadStart(modele.Exporter)); 
executerThread.SetApartmentState(ApartmentState.STA); 
executerThread.Start(); 

Maintenant, chaque exception non gérée jeté de ce feu de fil vers le haut notre UnhandledExceptionHandler à l'exception du celui que j'ai des problèmes avec. Même si j'attrape l'exception problématique et la relance, l'application se ferme silencieusement. Aucun des 3 gestionnaires (ApplicationExit, ThreadException, UnhandledException) n'est déclenché (les points d'arrêt ne sont pas touchés).

Il n'y a rien d'aussi exceptionnel dans cette exception (voir détails ici: http://pastebin.com/fCnDRRiJ).

Répondre

1

Vous travaillez avec un fournisseur OleDb qui a des appels au code natif. Si le code natif échoue avec un certain type d'exceptions, CLR peut fermer le processus en mode silencieux. J'ai eu des problèmes communs avec le fournisseur OleDb pour Sybase, je crois que seulement quelques solutions de contournement peuvent vous aider, pas une solution spécifique.

+0

Vous avez presque sûrement raison. Le mieux que je puisse faire est d'attraper pour gérer l'exception directement dans le fil. Cela signifie que nous ne pouvons pas faire confiance à AppDomain.CurrentDomain.UnhandledException pour tout enregistrer. –

+0

Je trouve toujours bizarre que si j'attrape l'exception, l'application continue de fonctionner correctement. C'est comme s'il y avait un drapeau placé quelque part qui disait "La prochaine fois que vous obtenez une exception non gérée, fermez juste". Cela n'a pas beaucoup de sens. –