#1 20. Februar 2008 Global Exception Handling Suche nach einer Möglichkeit Exceptions in C# (Net 2.0) global abzufangen. Soll rein zu Debuggingzwecken dienen, da ich keiner Lust habe "tausende" try und catch zu schreiben, um sie im nachhinein wieder zu löschen und die Exception mit "richtigem" Code zu verhindern. Code: public frmMain() { InitializeComponent(); AppDomain mCurrentDomain = AppDomain.CurrentDomain; mCurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(mHandler); } static void mHandler(object sender, UnhandledExceptionEventArgs args) { Exception e = (Exception)args.ExceptionObject; //Debug(e.Message); } Funktioniert soweit (die Pseudomethode Debug wird aufgerufen) nur wird die Exception dadurch nicht "behandelt", sondern das Programm stürzt trotzdem ab. Gibt es eine Möglichkeit dies zu verhindern? Sodass einfach die Methode Debug ausgeführt und die Exception ignoriert wird? Bin für jede Hilfe dankbar, da es wie gesagt nur um das Debugging geht und ich an meinem Problem nicht Stunden "verschwenden" will. + Multi-Zitat Zitieren
#2 20. Februar 2008 AW: Global Exception Handling Verdammt, bedankt -.- Du könntest bei den Methoden jeweils ein throw machen, dann wird die Exception immer zur aufrufenden Methode "weitergeworfen"... + Multi-Zitat Zitieren
#3 20. Februar 2008 AW: Global Exception Handling ?? Es geht in erster Linie darum die bereits "vorhandene" Exceptions global abzufangen, nicht darum neue Exceptions zu erzeugen... (throw new Exception) Ich hoffe ich hab dich richtig verstanden... + Multi-Zitat Zitieren
#4 20. Februar 2008 AW: Global Exception Handling Hast mich wohl falsch verstanden. zum beispiel einfach: Code: public void FooBar() throws Exception { ... } Dann kannst dir in der Methode schonmal das try und catch sparen. gibts ein fehler wird dieser an die aufrufenden Methoden weitergegeben. Dann brauchen entweder die wieder ein throws oder ein try und catch. Im prinzip kannst das so weit führen das du nur ein einziges try im Main() machst... + Multi-Zitat Zitieren
#5 20. Februar 2008 AW: Global Exception Handling Dein Programm wird doch in der Datei program.cs gestartet, bzw. deine frmMain wird instanziiert und geöffnet. Mach doch einfach einen Try-Catch-Block um diesen "Application.Run( ... )" wie unten angezeigt. Dann werden die Exceptions spätestens dort geschmissen und du kannst sie abfangen. Code: /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new Form1() /* oder was auch immer du machst */); } catch (Exception e) { // do sth here } } + Multi-Zitat Zitieren
#6 20. Februar 2008 AW: Global Exception Handling Warum kompliziert wenns auch einfach geht.... X( Bw an beide raus, werd wohl den Vorschlag von Tanya verwenden. Edit: Das von Tanya funktioniert zwar, nur leider auch nicht besser als mein erster Versuch: Das Programm stürzt nach dem catch block trotzdem ab. (logischerweise) + Multi-Zitat Zitieren
#7 20. Februar 2008 AW: Global Exception Handling anders gehts auch nicht so wie ich das verstehe möchtest du also das er die exeption wirft trotzdem weiter macht und ganz am ende kümmerst du dich um sie? + Multi-Zitat Zitieren
#8 20. Februar 2008 AW: Global Exception Handling Ja fast, nur das ich mich nicht direkt um "sie kümmern" will sondern einfach in einem log speichern Das Hauptproblem ist, dass das programm abstürzt, selbst wenn eine "unwichtige" methode eine Exception wirft. Würde ich in der Methode ein try/catch einbauen würde das Programm nach der Exception normal weiterlaufen... Wenn ich die exception aber komplett "durchfallen" lassen (Tanya Vorschlag), dann ist der Mainthread von der Exception auch betroffen und stürzt damit ab. + Multi-Zitat Zitieren
#9 20. Februar 2008 AW: Global Exception Handling ja aber eine exeption ist ja ein fehler und du wirst den compiler nicht dazu bekommen bei fehler einfach weiter zu machen, weil für ihn dürfte jeder fehler gleich schlimm sein da wirst du nicht um einige try catch drumrum kommen + Multi-Zitat Zitieren
#10 20. Februar 2008 AW: Global Exception Handling Gerade das funktioniert, wenn bei der Exception der Mainthread nicht betroffen ist. Sprich wenn du eine Exception in einer Methode hast, dann wird zwar die Methode beendet, aber das Programm läuft weiter... Wenn die Exception der Methode aber erst im Mainthread abgefangen wird, stürzt dieser dann auch mit ab. Es funktioniert definitiv ohne catch und try, google liefert dafür zumindest Beweise, nur leider keinen gescheiten Code... + Multi-Zitat Zitieren
#11 20. Februar 2008 AW: Global Exception Handling gut dann nehme ich alles zurück und behaubte das gegenteil aber leider kan ich dir da nicht weiter helfen, aber wieso behebst du nicht einfach die exeption wenn sie auftreten? + Multi-Zitat Zitieren
#12 24. Februar 2008 AW: Global Exception Handling Geht es hier um ein Windows- oder eine Webapplikation? Oder eine Class-Library? Falls es um eine Webapplikation geht, kannst Du in der Datei Global.asax die Funktion Code: Application_Error() nutzen. Code: Server.LastError() gibt Dir die letzte geschmissene Exception zurück. Hoffe das hilft. BG MaxDev + Multi-Zitat Zitieren
#13 27. Februar 2008 AW: Global Exception Handling Wenns um eine windows function hilft dir vielleicht das: zu finden in der ApplicationEvents.vb + Multi-Zitat Zitieren