Ich habe eine MFC-Anwendung kompiliert mit/Clr und ich versuche, eine endgültige Handler für sonst nicht erfasste gemanagte Ausnahmen zu implementieren. Bei nativen Ausnahmen funktioniert das Überschreiben CWinApp::ProcessWndProcException
.Endgültig verwalteter Ausnahmebehandler in einer gemischten nativen/verwalteten ausführbaren Datei?
Die beiden in Jeffs CodeProject article, Application.ThreadException
und AppDomain.CurrentDomain.UnhandledException
vorgeschlagenen Ereignisse werden nicht ausgelöst.
Kann jemand vorschlagen, einen endgültigen verwalteten Ausnahmebehandler für eine gemischte ausführbare Datei bereitzustellen?
Update:
Es scheint, dass diese Exception-Handler nur hinter Application.Run
oder ähnliche ausgelöst werden (. Gibt es einen Worker-Thread Geschmack, kann nicht an den Namen erinnern) Wenn Sie wirklich global zu wollen, fängt eine Ausgenommene Ausnahme Sie müssen einen SEH-Filter installieren. Du wirst keine System.Exception
bekommen und wenn du einen Callstack willst, musst du deinen eigenen Walker rollen.
In einer MSDN-Forumfrage zu diesem Thema wurde vorgeschlagen, einen ausreichend niedrigen Punkt des Haupt-MFC-Threads in einem try ... catch (Exception^)
zu überschreiben. Zum Beispiel CWinApp::Run
. Dies mag eine gute Lösung sein, aber ich habe keine Auswirkungen auf die Perfomance oder Stabilität untersucht. Sie erhalten die Möglichkeit, sich mit einem Call-Stack einzuloggen, bevor Sie eine Kaution erhalten, und Sie können das standardmäßige Windows-Ausnahmeverhalten vermeiden.
Vielleicht würde es uns helfen, mehr über die Ausnahmen zu erfahren, die ausgelöst werden und die nicht von den beiden von Ihnen erwähnten Ereignissen erfasst werden? – Charlie
Jede verwaltete Ausnahme überhaupt - jeder Erben von System :: Exception. Der Punkt der obigen Ereignisse besteht darin, auszulösen, wenn die/ave/managed-Ausnahme nicht abgefangen wird. –