AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Frage zu raise-Anweisung

Ein Thema von Popov · begonnen am 2. Apr 2014 · letzter Beitrag vom 3. Apr 2014
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 22:30
Ich hab eine Prozedur, aus der ich eine Funktion aufrufe, die wiederum eine Funktion aufruft. In dieser (zweiten) Funktion löse ich u. U. eine Exception aus. Ab da wird diese zweite Funktion natürlich unterbrochen und nach meinem Verständnis wird das fortgeführt bis zum ersten Aufruf (dazwischen wird die Fehlermeldung nicht abgefangen).

Nun ist es so, dass die zweite Funktion komplett unterbrochen wird, aber bei der ersten Funktion springt Delphi lediglich auf die letzte Zeile, d. h. diese Zeile wird noch ausgeführt. Bei der Prozedur wird auch noch eine Zeile ausgeführt.

Also entweder ich verstehe Exceptions falsch oder das ist nicht normal.

Ich würde den Code gerne hier veröffentlichen, ist aber zu groß. Reduziert auf das nötigste passiert das nicht und die Funktionen brechen normal ab.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 23:15
Bist du dir sicher, dass diese Zeile noch ausgeführt wird oder ist es nur, dass der Debugger auf der Zeile stehenbleibt?

Teilweise ist die DebuggerAnzeige nicht korrekt => Projekt erzeugen lassen.

Ein ShowMessage am Ende sollte da Klarheit bringen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 23:16
Du hast es schon richtig verstanden. Was dich (wie mich anfangs auch) aus den Trab bringt ist die Tatsache, dass die IDE eine Zeile zu tief rot markiert. (Und zwar immer. Das hat nichts mit fehlerhaft kodierten Zeilenumbrüchen zu tun, auch wenn man es oft hört) Ausgeführt wird da nichts mehr.

Das sieht man auch links im Stack-Fenster "Aufrufreihenfolge". Intuitiv wäre es, wenn die Zeile darüber rot angemalt werden würde, denn dieser Aufruf hat ja die Exception geworfen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 23:22
Nun ja, ob da wirklich zu tief markiert wird ist Ansichtssache.

Die Zeile die markiert ist wird beim nächsten Step - wenn keine Exception/Programmabbruch dazwischenkommt - ausgeführt.

Unter der Prämisse ist die Markierung also korrekt

Setze einen Haltepunkt im Code und starte das Programm. Am Haltepunkt wird gestoppt, die Zeile ist markiert, aber noch nicht ausgeführt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 23:49
Jetzt ist es weg, bzw. nicht mehrt in der Form da. Der Zeiger springt zwar immer noch auf die letzte Zeile in der Funktion, übernimmt aber anscheinend nicht mehr den Wert (es war Result). Auch in der Prozedur wird jetzt nichts mehr ausgeführt.

Das mit der ShowMessage habe ich auch gemacht, die wurde auch ausgeführt.

Jetzt ist alles wieder normal. Sonderbar.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 23:51
Am Ende jeder Procedur/Funktion gibt es einen unsichtbaren Bereich der zur Finalisierung benützt wird.
Dort wird z.B. bei Strings und Interfacezeigern der Referenzzähler erniedrigt und der String bzw. das Interface ggf. freigegeben.
Im Debugger lässt sich das nicht richtig darstellen weshalb es so scheint als würde die letzte Zeile ausgeführt.
fork me on Github
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Eine Frage zu raise-Anweisung

  Alt 2. Apr 2014, 23:57
Gut, das ist die Erklärung für jetziges Verhalten. Vor einer Stunde wurde die letzte Zeile ausgeführt.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Eine Frage zu raise-Anweisung

  Alt 3. Apr 2014, 08:24
Vor einer Stunde wurde die letzte Zeile ausgeführt.
Dann darfst Du halt zwischen 21:00 und 22:00 nicht mehr debuggen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#9

AW: Eine Frage zu raise-Anweisung

  Alt 3. Apr 2014, 09:11
Wenn der Quellcode nicht mehr mit der gelinkten dcu-Datei übereinstimmt sind solche Effekte zu beobachten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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