![]() |
Eine Frage zu raise-Anweisung
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. |
AW: Eine Frage zu raise-Anweisung
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. |
AW: Eine Frage zu raise-Anweisung
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. |
AW: Eine Frage zu raise-Anweisung
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. |
AW: Eine Frage zu raise-Anweisung
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. |
AW: Eine Frage zu raise-Anweisung
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. |
AW: Eine Frage zu raise-Anweisung
Gut, das ist die Erklärung für jetziges Verhalten. Vor einer Stunde wurde die letzte Zeile ausgeführt.
|
AW: Eine Frage zu raise-Anweisung
Zitat:
|
AW: Eine Frage zu raise-Anweisung
Wenn der Quellcode nicht mehr mit der gelinkten dcu-Datei übereinstimmt sind solche Effekte zu beobachten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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-2025 by Thomas Breitkreuz