J'essaie de planter mon application WPF et de capturer l'exception en utilisant le nouvel attribut .NET 4 ci-dessus.Nouvel attribut HandleProcessCorruptedStateExceptions dans .NET 4
J'ai réussi à planter manuellement mon application en appelant Environment.FailFast("crash");
. (J'ai également réussi à le planter en utilisant le code de Hans de "How to simulate a corrupt state exception in .NET 4?".)
L'application appelle le code de plantage ci-dessus en appuyant sur un bouton. Voici mes gestionnaires d'exception:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
DispatcherUnhandledException += app_DispatcherUnhandledException;
}
[HandleProcessCorruptedStateExceptions]
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//log..
}
[HandleProcessCorruptedStateExceptions]
void CurrentDomain_FirstChanceException(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
//log..
}
[HandleProcessCorruptedStateExceptions]
void app_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
//log..
}
Le //log...
commentaire ci-dessus est juste pour illustration; il y a un vrai code d'enregistrement là-bas.
Lors de l'exécution dans Visual Studio, une exception est levée, mais elle n'émerge pas vers les blocs du gestionnaire d'exceptions. Lors de l'exécution en mode autonome (sans le débogueur joint), je ne reçois aucun journal, malgré ce que j'attends.
Pourquoi est-ce le cas et comment faire exécuter le code de gestion?
Peut-être que vous devez également ajouter [SecurityCritical] à votre gestionnaire. –