Absturz bei tForm.Create

Rund um die LCL und andere Komponenten
Antworten
Martin V
Beiträge: 142
Registriert: Sa 30. Jan 2010, 19:35
OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
CPU-Target: xxBit

Absturz bei tForm.Create

Beitrag von Martin V »

Ich habe ein weiteres Programm von einer anderen Entwicklungsumgebung auf Lazarus portiert und somit schlagartig einen umfangreichen Code, der nun laufen sollte. (Das hat schon mehrfach gut geklappt.)

Diesmal habe ich einen Laufzeitfehler beim Starten des Programms. Ich habe in myproject.lpr im Haupt-Begin End Block einen Passus, wo ich meine zusätzlichen Forms erzeugen lasse:

Form5 := tForm5.Create (Form1);

Die Mainform und eine weitere sehr umfangreiche erzeugt er ohne Fehler, bei einer anderen nicht so umfangreichen stürzt er ab, ohne dass tForm5.OnCreate erreicht wird. Er bleibt hängen bei

Datei control.inc:
tControl.ReadState (Reader:TReader);
inherited ReadState(Reader);

und die nächste über Call Stack anspringbare Stelle meines eigenen Programmcodes ist die oben genannte Stelle aus der lpr-Datei.

Testweise habe ich die lfm-Datei stark zusammengestrichen, das hat keinen Effekt. Ich bin momentan ziemlich ratlos. Hat jemand eine Idee?

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Absturz bei tForm.Create

Beitrag von Mathias »

Könnte es sein, das folgende Zeile in den lpr-Datei fehlt ?

Code: Alles auswählen

Application.CreateForm(TForm5, Form5);          
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4888
Registriert: Fr 8. Apr 2011, 09:01

Re: Absturz bei tForm.Create

Beitrag von wp_xyz »

Ich tippe eher auf ein Komponenten-Problem. Sitzen auf dem Formular Komponenten, die nicht zum Standardlieferumfang von Lazarus gehören? Wenn ja, sind sie überhaupt installiert? Wenn ja, öffne ein leeres Formular und klicke jede der Zusatzkomponenten der Reihe nach drauf. Dazwischen übersetzen und starten. Läuft dieses Test-Programm ohne Absturz? Wenn nicht, hast du die schuldige Komponente gefunden. Suche nach einer aktualisierten Version, insbesondere eine spezielle Lazarus-Version.

Martin V
Beiträge: 142
Registriert: Sa 30. Jan 2010, 19:35
OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
CPU-Target: xxBit

Re: Absturz bei tForm.Create

Beitrag von Martin V »

Nein, ich habe die Mainform entsprechend erzeugt,

Application.CreateForm (TForm1, Form1);

alle anderen dann wie oben dargestellt.

Ich habe inzwischen noch die Packages abgeglichen. Ich habe nämlich ein ähnliches, ebenfalls portiertes Projekt, und das läuft prima.

Es wird nach der Form1 nur noch die Form2 created, alle anderen schlagen dann fehl. Es sind zum Teil sehr einfache Forms, ohne irgendwelche spezielle Components. Inzwischen habe ich festgestellt, dass bei der Form2, die noch erzeugt wurde, eine einfache Caption := 'captiontext' auch fehlschlägt.

Inzwischen habe ich noch kontrolliert, dass ich die lfm-Ressourcen ordnungsgemäß eingebunden habe und in der lpr-Datei die Ressourceneinbindung *.res steht. Alles, was ich bislang überprüfen konnte, ist genauso wie bei dem Projekt, das läuft.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Absturz bei tForm.Create

Beitrag von Michl »

Du kannst recht einfach testen, ob die .lfm defekt ist.

Einfach

Code: Alles auswählen

Form5 := tForm5.Create (Form1);
durch

Code: Alles auswählen

Form5 := tForm5.CreateNew (Form1);
ersetzen.

Wenn das erfolgreich funktioniert, hat die .lfm, in der TForm5 beheimatet ist, einen Fehler (bzw. unbekannten Eintrag/Property).

Randbemerkung: So einen oder ähnlichen Fehler bekomme ich auch manchmal, wenn ich mit eigenen Packages arbeite. Z.B., wenn ich eine Änderung in einem published Property meines Package vornehme und das Projekt auf einem anderen Rechner/OS testen will und dort vergaß das Package ebenfalls zu updaten.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Martin V
Beiträge: 142
Registriert: Sa 30. Jan 2010, 19:35
OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
CPU-Target: xxBit

Re: Absturz bei tForm.Create

Beitrag von Martin V »

(Problem gelöst:) Ich habe jetzt noch weiter experimentiert und erstmal herausgefunden, dass nur rund die Hälfte meiner 15 Forms betroffen sind. Auf den ersten Blick konnte ich keine Gemeinsamkeiten finden. Einmal hatte ich "public" statt gar nichts (= published) am Anfang der Klassendeklaration geschrieben, das war ein Grund für einen Absturz. Die meisten Abstürze ergaben sich aber dadurch, dass die LFM-Datei nicht exakt mit der Klassendeklaration übereinstimmte: Andere Namen für die Components (z. B. Edit0 statt Edit1), dann Component-Events in der LFM-Datei, die keine korrespondierende Prozedur in der Klassendeklaration hatten oder falsche Typbezeichnungen, beispielsweise in der LFM-Datei tButton und im Quelltext tBitBtn. Das meiste war schon korrekt, aber eine Handvoll Fehler reichen, dass nichts mehr geht. Danke für Euer Mitdenken. Erstaunlicherweise hat der Compiler diese Dinge nicht bemerkt, sondern erst zur Laufzeit. Zum Teil kamen sogar recht hilfreiche Fehlermeldungen zur Laufzeit, aber auch völlig nichtssagende.

Antworten