Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 27.05.15 16:49 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: 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.


Zuletzt bearbeitet von Delphi-Laie am Mi 27.05.15 20:12, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 28.05.15 11:02 
user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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


Zuletzt bearbeitet von Peter18 am Do 28.05.15 12:58, insgesamt 1-mal bearbeitet
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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