![]() |
Exceptions von weit weg abfangen
Folgendes Szenario:
Code:
Die Prozedur "second" stammt aus einer anderen Unit an der ich nichts verändern möchte. Gleichzeitig besteht aber die Gefahr, dass genau dort eine Exception geworfen wird. Die möchte ich aber abfangen, also dachte ich mir, dass die aufrufende Prozedur "first" dies tun könnte. Macht sie aber nicht. Das was ich dort in die except-Klausel schreibe, wird einfach ignoriert. Wie kann ich das lösen?
procedure first;
begin try second; except dosomethingaboutit; end; end; procedure second; begin dosomethingthatmightcauseanexception; end; |
Re: Exceptions von weit weg abfangen
das in deinem Except wird nur ignoriert wenn kein Fehler ausgelöst wird. Woher bist du dir so sicher das der Except-Block nie ausgeführt wird? (haltepunkte etc. gesetzt?)
|
Re: Exceptions von weit weg abfangen
Code:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils, Dialogs; procedure second; begin case Round(Random) of 0: StrToInt('Zwei'); // EConvertError 1: TObject(nil).Destroy; // Allgemeine Schutzverletzung end; end; procedure first; begin try second; except ShowMessage('Es ist ein Fehler aufgetreten.'); end; end; begin Randomize; first; end. Zitat:
Die Unit SysUtils sollte aber eingebunden werden, sonst kann es bei Fehlern statt Exceptions auch RuntimeErrors geben. Die dann das Programm direkt beenden. |
Re: Exceptions von weit weg abfangen
Zitat:
|
Re: Exceptions von weit weg abfangen
Zitat:
|
Re: Exceptions von weit weg abfangen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe keine Zeit um nach dem Grund für diese Exception zu suchen, daher zähle ich nur die fehlerhaften ZIPs mit und ignoriere sie.
Im Anhang eine von zwei bisher festgestellten Exceptions: |
Re: Exceptions von weit weg abfangen
Sieht eher so aus als liegt das Problem an einer Datei, die evtl. kein gültiges Datum für FileAge / DateTimeToStr besitzt.
Ich würde an dieser Stelle evtl. mal einen try except block verwenden. |
Re: Exceptions von weit weg abfangen
Eben genau darum geht es ja. Ich kenne die Zeile, die den Fehler verursacht, aber ich möchte in dieser Unit nichts verändern, weil es nicht meine Unit ist. Sicher kann ich da einen try-Block einfügen, aber dann bräuchte ich diesen Thread nicht erstellen.
|
Re: Exceptions von weit weg abfangen
Zitat:
|
Re: Exceptions von weit weg abfangen
Hast du die Anwendung mal "ausserhalb" von Delphi gestartet? Kommt die Fehlermeldung dann auch?
|
Re: Exceptions von weit weg abfangen
Interessant. Die Fehlermeldung kommt nur im Delphi während der Laufzeit. Normalerweise (bei anderen Programmen) kommt erst eine Delphi-Exception und wenn ich dann das Programm fortsetze bringt das Programm dieselbe Meldung nochmal. Diesmal aber nicht. Die Exception kommt NUR im Delphi... kein Wunder also, dass bei mir der Exception Block nicht durchlaufen wird. Denn das Programm erkennt keine Exception, sondern nur Delphi... aber was bringt mir dieses Wissen :D
|
Re: Exceptions von weit weg abfangen
Delphi bringt standardmäßig immer eine Exception (kann man aber abstellen),
deßhalb kommen bei dir sonst immer Zwei. Diesesmal kommt aber nur die von Delphi und die vom Programm hast du per Try-Except unterbunden. Aber warum die MessageBox nicht kommt *schulterzuck* |
Re: Exceptions von weit weg abfangen
Zitat:
Der Debugger stoppt bei allen Exceptions, um dir die Möglichkeit zum Debuggen zugeben. Wenn dann eine try except Anweisung kommt wird die Exception nicht zu Anwender durch. Wenn Du den try except Block entfernst sieht auch der Anwender die Exception. |
Re: Exceptions von weit weg abfangen
Ich sehe gerade, dass die "fremde" Unit selber schon genug try-except-Blöcke hat. Dann sollte es nun klar sein, wieso es nicht klappt. 2 Verschachtelte try-except-Blöcke sind sicher nicht möglich, bzw. der innere gibt die Esception logischerweise nicht an den äusseren weiter. Dann muss ich mir etwas anderes einfallen lassen hmmmmm.
|
Re: Exceptions von weit weg abfangen
Zitat:
Wenn er F9 gedrückt hätte um das Programm weiterlaufen zu lassen wäre die MessageBox bestimmt gekommen. |
Re: Exceptions von weit weg abfangen
Delphimenü -> Tools -> Debugger Optionen -> Reiter Sprach-Exceptions -> Checkbox "Bei Delphi-Exceptions stoppen" deaktivieren.
|
Re: Exceptions von weit weg abfangen
Zitat:
|
Re: Exceptions von weit weg abfangen
Zitat:
Delphimenü -> Tools -> Debugger Optionen -> Reiter Sprach-Exceptions -> "Hin&zufügen..." Button drücken, EConvertError eingeben und OK drücken. Dann bleibt der Debugger bei allen Exceptions stehen, außer bei den angegebenen :-) Zitat:
Du hast Recht, bei verschachtelten try except Blöcken hast Du so gut wie keine Chance von außen an die Exception ranzukommen. Vieleicht hat die Komponente die Du verwendest ein OnError Ereignis. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz