Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi NICHT bei Exceptions im try..except Block anhalten. (https://www.delphipraxis.net/73665-nicht-bei-exceptions-im-try-except-block-anhalten.html)

BeerBear 21. Jul 2006 12:01


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]

andreash 21. Jul 2006 12:33

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.

arbu man 21. Jul 2006 12:36

Re: NICHT bei Exceptions im try..except Block anhalten.
 
naja es geht so:
Delphi-Quellcode:
try
  hier dann der fehlerhafte code
except
  on e:Exception do begin
    // hier sollte man die exception ausweten
  end;
end
Gut ist das aber nicht!

DGL-luke 21. Jul 2006 12:50

Re: NICHT bei Exceptions im try..except Block anhalten.
 
@arbu man: Der Debugger schreit aber trotzdem.

3_of_8 21. Jul 2006 12:50

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.

himitsu 21. Jul 2006 12:55

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Zitat:

Zitat von 3_of_8
oder irgendwo nach ner Option zum Ausschalten des Debuggers suchen, wenn es die irgendwo geben sollte.

Projektoptionen? :zwinker:

BeerBear 21. Jul 2006 13:25

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.

Klaus01 21. Jul 2006 13:37

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

Khabarakh 21. Jul 2006 13:45

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Zitat:

Zitat von Klaus01
Hallo,

schau Dir mal bitte den Thread an, besonders Beitrag 3

Hab ich. Aber was bitte hat das mit dem Thema zu tun?

@BeerBear: Wechsel zu .Net :duck: . Mit dem Delphi-Debugger hast du AFAIK keine Chance.

Peinhard 21. Jul 2006 13:46

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.

Klaus01 21. Jul 2006 13:59

Re: NICHT bei Exceptions im try..except Block anhalten.
 
@Khabarakh
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von Klaus01
Hallo,

schau Dir mal bitte den Thread an, besonders Beitrag 3

Hab ich. Aber was bitte hat das mit dem Thema zu tun?

@BeerBear: Wechsel zu .Net :duck: . Mit dem Delphi-Debugger hast du AFAIK keine Chance.

Das hier:
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

BeerBear 21. Jul 2006 14:09

Re: NICHT bei Exceptions im try..except Block anhalten.
 
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)
Schön, dann bekomme ich zwar mit, dass eine Exceptioin aufgetreten ist, jedoch nicht WO.

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.

EDatabaseError 21. Jul 2006 14:11

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

BeerBear 21. Jul 2006 14:17

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.

sakura 21. Jul 2006 14:50

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Zitat:

Zitat von BeerBear
Ich ziehe also als Fazit, dass es nicht möglich ist. Jedenfalls unter Delphi 3.

Das geht in keiner Version, da in dem Moment, wo die Exception auftritt, der Debugger nicht weiß, ob er sich in einem try...except-Block befindet. Klingt komisch, is aber so.

...:cat:...

Khabarakh 21. Jul 2006 14:53

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Zitat:

Zitat von BeerBear
Ich kann mir die Version leider nicht aussuchen. Ich arbeite bestimmt nicht freiwillig mit Delphi 3.

Hätte mich auch gewundert, wenn ihr mal schnell 600.000 Zeilen Code auf eine neue Platform übertragen könntet ;) . Deshalb auch das ":duck:".
Zitat:

Zitat von BeerBear
@EDatabaseError:
Zettel und Stift bereithalten.

Es haben nun schon 4 Personen dein wirklich ausreichend geschildertes Problem fehlinterpretiert, davon 2 sogar nach deiner 2. Erklärungs-Version (#7). Glaubst du wirklich noch an Besserung nach dem dritten Versuch :stupid: ?

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.

inherited 21. Jul 2006 14:58

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Zitat:

Zitat von andreash
...Exceptions sollten nur in Ausnahmefällen auftreten...

Da kennst du aber die Jungs von Indy schlecht ;)
Stichwort "Connection closed gracefully"

BeerBear 21. Jul 2006 16:16

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Zitat:

Glaubst du wirklich noch an Besserung nach dem dritten Versuch ?
Nicht wirklich, aber wer fragt, bekommt eben Antwort.

Zitat:

...Exceptions sollten nur in Ausnahmefällen auftreten...
Stimmt, aber die meisten Exceptions innerhalb try..except Blöcken treten auch in den Units von zugekauften Komponenten auf. Sind also nicht auf unserem Mist gewachsen.

@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:

Ralf Kaiser 21. Jul 2006 20:12

Re: NICHT bei Exceptions im try..except Block anhalten.
 
Halli Hallo,

Zitat:

Zitat von BeerBear
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?

Es gibt da eine Möglichkeit...

Zitat:

Zitat von BeerBear
Es handelt sich bei mir um Delphi 3

... ob die aber schon in D3 vorhanden war weiss ich wirklich nicht mehr.

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