Entwickler-Ecke
Sonstiges (Delphi) - Und noch ein Problem: Stapelüberlauf
Peter18 - Mi 27.05.15 16:49
Titel: Und noch ein Problem: Stapelüberlauf
Ein freundliches Hallo an alle,
ich habe eine Unit mit der Schnittstelle zur Winsock in einer Testumgebung erstellt. Dort lief alles einwandfrei. Nun wollte ich die Unit (.dcu) mit uses in ein anderes Projekt einbinden und erhalte einen Stapelüberlauf. Wenn ich die Unit wieder herausnehme hat der Compiler nichts zu meckern. Die Änderung der Stack-Größe in den Projektoptionen ändert nichts.
Liegt das an der DCU oder muß irgend eine Option verändert werden??
Grüße von der etwas sonnigen Nordsee
Peter
Delphi-Laie - Mi 27.05.15 19:27
Stapel = stack?
Ich kenne Stacküberläufe nur von zu häufigen / tiefen Rekursionen bei laufenden (in meinem Falle ausschließlich mit Delphi erstellten) Programmen, nicht jedoch vom Compilieren.
jaenicke - Mi 27.05.15 19:52
Wie sieht denn der Stacktrace an der Stelle in Delphi aus? Wenn die Units mit Debuginformationen kompiliert wurden, solltest du die Stelle aber auch direkt im Quelltext angezeigt bekommen.
mandras - Mi 27.05.15 21:13
Moment...
Peter, meintest Du das compilierte Programm hat einen Stacküberlauf oder tritt
eine entspr. Meldung beim Compilieren auf?
Peter18 - Do 28.05.15 10:41
Hallo Delphi-Laie,
stack (englisch) = Stapel! In diesem Fall beim compilieren.
Hallo mandras,
richtig! Beim compilieren kommt diese Meldung. Danach ist die Quelldatei schreibgeschützt und Änderungen können nicht mehr vorgenommen werden. Erst nach einem Delphi Neustart geht wieder was.
Hallo Sebastian,
Dank Dir, aber so weit komme ich nicht. Ich gebe die Anweisung "Projekt kompilieren" und nach einer relativ langen Zeit kommt die Meldung. Die Hacken bei den Compileroptionen "Debuggen" sind alle gesetzt.
Offensichtlich tritt der Fehler nicht zur Laufzeit auf, sondern beim Compilieren oder Laden. Sonst hätten ja auch Einstellungen bei der "Maximalen Stack-Größe" etwas bewirken müssen.
Grüße von der wolkigen Nordsee
Peter
jaenicke - Do 28.05.15 11:02
Peter18 hat folgendes geschrieben : |
Offensichtlich tritt der Fehler nicht zur Laufzeit auf, sondern beim Compilieren oder Laden. Sonst hätten ja auch Einstellungen bei der "Maximalen Stack-Größe" etwas bewirken müssen. |
Daß würde bei einer Endlosrekursion nur bewirken, dass es länger dauert bis der Fehler erscheint, das merkt man oft gar nicht.
Ja, bei Delphi 4 gibt es leider nicht viel um so etwas zu debuggen. (Ab Delphi 2005 in der neuen IDE wird der Stacktrace zu dem Fehler angezeigt.)
Was du machen kannst ist Delphi mit Delphi debuggen. Das kann auch Delphi 4. Du erstellst eine DLL oder ein Package, trägst Delphi als Hostanwendung ein und startest das Projekt. Nun hast du Delphi im Debugger und siehst bei dem Fehler den Stacktrace.
Peter18 - Do 28.05.15 11:20
Hallo Sebastian,
Dank Dir für die Antwort. Geht denn das auch mit meiner stark abgespeckten Version?? Mir fehlen dieverse Quellen von Delphi. Wenn ja, müstest Du mir eine genauere Anleitung geben, sonst peil ich das noch nicht.
Alternativ muß ich wohl sonst den Quelltext der Unit, die Streit macht, in das Projekt einbinden.
Grüße von der Nordsee unter dunklen Wolken
Peter
jaenicke - Do 28.05.15 11:37
Du erstellst ein neues DLL Projekt, trägst in den Startparametern des Projekts die Delphi-Exe ein und drückst F9...
Mehr ist da nicht.
Wo die Startparameter bei Delphi 4 waren, kann ich dir leider nicht sagen. In den Projektoptionen oder so.
Peter18 - Do 28.05.15 11:50
Hallo Sebastian,
die Unit, die Probleme macht wird in dem Dll Projekt eingetragen?? Die Startparameter liegen unter "Start/Parameter".
Wo muß Delphi.exe denn eingetragen werden? Unter "Host-Anwendung" oder "Parameter"?
Grüße von der Regnerischen Nordsee
Peter
jaenicke - Do 28.05.15 12:02
Mit der Unit machst du gar nichts, einfach nur ein leeres Projekt reicht schon. Wenn der Stacktrace dann nichts bringt, kannst du die Unit immer noch hinzufügen.
In der neu gestartet Delphi-Exe musst du dann natürlich den Fehler auslösen, damit du etwas siehst.
Am besten sind dafür natürlich zwei Monitore. ;-)
Und eintragen musst du sie als Hostanwendung wie oben schon geschrieben.
Peter18 - Do 28.05.15 12:39
Hallo Sebastian,
Dank Dir für die Antwort. Mit 2 Monitoren entwickle ich, sonst ist das etwas umständlich. Der "Aufruf Stack"
rührt sich überhaupt nicht. Der Fehler tritt dann auf, wenn ich die Unit unter "Uses" eintrage.
Kann es sein, dass die Ursache ein Namenskonflikt ist, der Rekursion auslöst und mit dem Quelltext überschrieben wird??
Grüße von der noch immer wolkigen Nordsee
Peter
OlafSt - Do 28.05.15 12:52
Eine solche zirkuläre Referenz wird seit TP1.0 erkannt und angemosert. Vielleicht hilft es, den uses-Eintrag der Unit vom interface- in den implementation-Teil zu verschieben - sofern das möglich ist.
Peter18 - Do 28.05.15 13:05
Hallo OlafSt,
auch Dir Dank für Deine Antwort. Das wär zwar nicht sinnvoll, aber ich habe es probiert, mit dem gleichen Ergebnis.
Grüße von der Nordsee
Peter
Peter18 - Do 28.05.15 14:35
Ein freundliches Hallo an alle,
wie es immer so ist, wenn man darüber spricht, weitere Experimente haben mich auf die Spur gebracht.
Der Stack läuft anscheinend über, wenn er mehrere DCU-Dateien nicht findet. Normaler weise nölt er, wenn eine Datei fehlt, in diesem Fall habe ich mehrere Dateien übersehen und er hat sich verschluckt. Nachdem nun alle Dateien in dem DCU-Ordner liegen, klappt es.
By the way, kann man das nicht auch irgendwie in eine Datei bekommen, ohne die Quellen zu ändern?
Grüße von der feuchten Nordsee (oben und unten)
Peter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!