NICHT bei Exceptions im try..except Block anhalten.
Moin!
Wie allgemein bekannt, bietet Delphi ja die Option "Bei Exceptions anhalten". Allerdings tut Delphi dies auch unerwünschterweise innerhalb von try..except Blöcken. Gibt es eine Möglichkeit dies zu verhindern? Danke schonmal! [Edit: Es handelt sich bei mir um Delphi 3] |
Re: NICHT bei Exceptions im try..except Block anhalten.
Hallo,
wieso möchtest du das verhindern? :gruebel: Du benutzt doch nicht etwa Exceptions für die Programmkontrolle? :wink: Exceptions sollten nur in Ausnahmefällen auftreten, also am besten gar nicht. Wenn die Exceptions nerven, ist das ein Hinweis darauf, den Programmcode zu überarbeiten und die Exceptions mit Abfragen zu umgehen. PS: In Delphi 7 lassen sich Breakpoints so einrichten, dass von bestimmten Programmzeilen aus Delphi nicht mehr bei Exceptions stoppt. |
Re: NICHT bei Exceptions im try..except Block anhalten.
naja es geht so:
Delphi-Quellcode:
Gut ist das aber nicht!
try
hier dann der fehlerhafte code except on e:Exception do begin // hier sollte man die exception ausweten end; end |
Re: NICHT bei Exceptions im try..except Block anhalten.
@arbu man: Der Debugger schreit aber trotzdem.
|
Re: NICHT bei Exceptions im try..except Block anhalten.
Nein, sein Problem ist folgendes: Delphi gibt eine Warnmeldung aus, wenn eine Exception ausgelöst wird.
Auch, wenn man sie mit try-except fängt. Allerdings ist das nur im Debugger so, wenn das ganze ohne Debug-Hook läuft geht es. Also, entweder die EXE direkt starten oder irgendwo nach ner Option zum Ausschalten des Debuggers suchen, wenn es die irgendwo geben sollte. |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
|
Re: NICHT bei Exceptions im try..except Block anhalten.
Also nochmal:
Ich möchte schon, dass der Debugger bei Exceptions ganz normal anhält und mir auch zeigt, welche Zeile diese auslöst. Aber eben nicht, wenn diese Exception bereits in einem try..except Block gefangen wird. Bei dem zu debuggenden Programm handelt es sich um mehr als 600.000 Zeilen. Da kommen schon einige Exceptions innerhalb try..except Blöcken zu stande. Ich möchte mich aber beim Debuggen auf die Exceptions konzentrieren, die noch nicht abgefangen werden. |
Re: NICHT bei Exceptions im try..except Block anhalten.
Hallo,
schau Dir mal bitte den Thread an, besonders Beitrag 3 http://www.delphipraxis.net/internal...exceptions+ide Ich weiß allerdings nicht ob es diese Option schon bei Delphi 3 gibt. Grüße Klaus |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
@BeerBear: Wechsel zu .Net :duck: . Mit dem Delphi-Debugger hast du AFAIK keine Chance. |
Re: NICHT bei Exceptions im try..except Block anhalten.
Es gibt (ab D5?) auch die Möglichkeit, bestimmte Exceptions vom Debugger ignorieren zu lassen (Debugger-Optionen). Das hilft bei der eigentlichen Fragestellung hier aber auch nicht weiter. Da würde3 ich evt mal den Weg probieren, 'Bei Exceptions anhalten' ganz auszuschalten und einen Handler auf Application-Ebene (Application.OnException) zu schreiben, wo die nicht behandelten Exceptions dann zB mit ShowMessage oä an die Oberfläche gebracht werden oder auch einfach nur 'Pseudocode' mit einem Breakpoint (und evt mit einem $IFDEF DEBUG-Konstrukt). Dann muß man allerdings auch den Aufrufstack zu Hilfe nehmen, um zu sehen 'wo das herkommt'. Das ist uU auch nicht immer ganz genau bzw 'zielführend', evt muß man dann die entsprechende Aktion auch noch mal mit eingeschaltenem Anhalten wiederholen.
|
Re: NICHT bei Exceptions im try..except Block anhalten.
@Khabarakh
Zitat:
Die Exception wird ausgelöst und, solange Du den Code in der IDE ausführst, von der IDE abgefangen und von Debugger ausgegeben. Führst Du diesen Code nun als Kompilat aus (exe Datei) wird Dein Fehler richtig ausgegeben. Den selben Effekt kannst Du erreichen, wenn Du in der IDE die Delphi Exceptions abschaltest (wie Kroko1999 unter Punkt d bereits erwähnt hat) Grüße Klaus |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
Ich ziehe also als Fazit, dass es nicht möglich ist. Jedenfalls unter Delphi 3. @Khabarakh Ich kann mir die Version leider nicht aussuchen. Ich arbeite bestimmt nicht freiwillig mit Delphi 3. |
Re: NICHT bei Exceptions im try..except Block anhalten.
also nochmal zum mitschreiben du willst noicht das delphi den fehler brint willst aber wissen wo der Fehler war oder versteh ich da was falsch.
Unter D3 kann man ausschalten das Delphi seine Exception Meldungen bringt. Weiß es grad nicht auswendig könnte aber bei bedarf nachschauen. Mfg Tobi |
Re: NICHT bei Exceptions im try..except Block anhalten.
@EDatabaseError:
Zettel und Stift bereithalten. Der Debugger soll anhalten an der Stelle, an der eine Exception auftritt. Das soll er aber nicht tun, wenn die Exception in einem try..except Block auftritt. Ausschalten lässt dich das "Bei Exception anhalten" übrigends unter Tools->Umgebungsoptionen->Vorgaben->Bei Exception anhalten. |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
...:cat:... |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
Zitat:
BTT: Peinhard hat einen möglichen Workaround beschrieben. Aber selbst wenn du den Callstack bekommen kannst, fehlen dir immer noch wichtige Informationen wie Variablen und Parameter. Zwar kannst du nun den geworfenen Exceptiontyp wieder abfangen lassen, aber wenn dieser auch davor in try-Blöcken auftritt, hast du ein wirkliches Problem. Da kann man eigentlich nur noch raten, vor dem nächsten Projekt einen besseren Debugger zu suchen. |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
Stichwort "Connection closed gracefully" |
Re: NICHT bei Exceptions im try..except Block anhalten.
Zitat:
Zitat:
@Khabarakh Der Aufwand, für Peinhard's Workaround steht leider in keinem Verhältnis zum Nutzen. Also werde ich wohl weiterhin ein paar Meldungen wegclicken. Was nicht geht, geht eben nicht. Trotzdem Danke an alle, die helfen wollten. :dp: |
Re: NICHT bei Exceptions im try..except Block anhalten.
Halli Hallo,
Zitat:
Zitat:
Also: Irgendwo im Quelltext vor der Stelle an der die Exception stattfinden wird einen Breakpoint setzen. Dann mit der rechten Maustaste auf den roten Breakpoint-Punkt klicken und "Breakpoint Eigenschaften" auswählen. In den Eigenschaftsfenster auf "Erweitert" klicken. Dann "Anhalten" deaktivieren Dann "Exceptions ab hier ignorieren" (kann auch etwas aners beschriftet sein) aktivieren Irgendwo im Quelltext nach der Stelle an der die Exception stattfinden wird einen Breakpoint setzen. Dann mit der rechten Maustaste auf den roten Breakpoint-Punkt klicken und "Breakpoint Eigenschaften" auswählen. In den Eigenschaftsfenster auf "Erweitert" klicken. Dann "Anhalten" deaktivieren Dann "Exceptions ab hier ignorieren" (kann auch etwas aners beschriftet sein) deaktivieren Dann "Exceptions ab hier behandeln" (kann auch etwas aners beschriftet sein) aktivieren Das ganze ist so lange wirksam wie die beiden Breakpoints gesetzt sind. Wie gesagt, ich weiss wirklich nicht mehr ob diese Möglichkeit schon unter Delphi 3 existierte. Da musst du schon nachsehen. Ciao, Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz