SEGV bei Beenden des Programms

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

SEGV bei Beenden des Programms

Beitrag von photor »

Hallo Forum,

wahrscheinlich stehe ich nur irgendwo ganz doof auf dem Schlauch:

ich habe eine kleine Applikation, die ich vom Windows Delphi auf mein Linux/Lazarus übertragen will. Ich habe also das Delphi-Projekt konvertiert und dann versucht den ganzen Delphi-spezifischen Code zu eliminieren (also auch die .dpr und .dpi oder .dpm in entsprechende Lazarus-Dateien konvertiert und das {$IFDEF FPC} {$MODE Delphi} {$ENDIF} entfernt). Das ganze wird auch in der IDE übersetzt und ich kann es starten und ausführen.

Bloß, wenn ich den Close-Button clicke, der die entsprechende Funktion aufruft, lande ich mit einem SEGV-Error im Debugger und da direkt im Assembler-Tab. Die Funktion ist nichts besonderes und als Callback für den ButtonClick-Event eingetragen:

Code: Alles auswählen

 procedure TMainForm.ButtonCloseClick(Sender: TObject);
begin
  Close;
end;  

Eigentlich mache ich das immer so, wenn nichts weiter aufzuräumen ist.

Mögliche Ursachen:
  • vielleicht sind noch nicht alle Arrays, Felder, StringList ordentlich aufgeräumt (mögliches Memory Leak). Sollte aber doch kein Problem sein, wenn ich die Applikation beende, oder?
  • Konvertierung bzw. meine Eingriffe, um von Delphi los zu kommen. In dem Fall würde ich das Projekt neu in Lazarus aufsetzen; Nachteil: ich müsste das GUI-Fenster/Form nachbauen.
Hat jemand noch eine Idee?

Ciao,
Photor

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: SEGV bei Beenden des Programms

Beitrag von theo »


Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: SEGV bei Beenden des Programms

Beitrag von photor »

Moin theo,

das hatte ich nicht mehr auf dem Schirm. Danke für den Hinweis - aaaber ich nutze Gtk.
Trotzdem schaue ich mir das nochmal in Ruhe an.
Vielleicht versuche ich das Projekt doch nochmal neu als Lazarus-Projekt aufzusetzen.

BTW:

Code: Alles auswählen

[photor@Picard ~]$ lazarus -v
2.0.6 SVN Revision: Unknown
[photor@Picard ~]$ fpc -v
Free Pascal Compiler version 3.0.4 [2019/05/13] for x86_64

Archlinux (tagesaktuell)

Ciao,
Photor

EDIT: Versionen von Lazarus und FPC

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: SEGV bei Beenden des Programms

Beitrag von photor »

Hm. Gerade mal ein neues Projekt gestartet: Main Window mit einen Close Button, der nur ein Close macht - alles gut.
Dann ein OpenFileDialog dazu gepackt, der den Namen des gewählten Files in ein TEdit schreibt (tut auch) und dann den Close-Button geclickt, und ich bekomme wieder den SEGV-Fehler. Grmpf.

Ciao,
Photor

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: SEGV bei Beenden des Programms

Beitrag von Winni »

Hi!

Das liegt an den gtk libraries.

Das hatte ich vor 4 Wochen auch.
Nach dem update der gtk libraries war es weg.

Winni

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: SEGV bei Beenden des Programms

Beitrag von photor »

Ok. Dann bleibt nur warten, bis das Update kommt.

Ciao,
Photor

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: SEGV bei Beenden des Programms

Beitrag von theo »

Winni hat geschrieben:Hi!

Das liegt an den gtk libraries.

Das hatte ich vor 4 Wochen auch.
Nach dem update der gtk libraries war es weg.

Winni


Welche Version war denn das?

Ich habe hier GTK+ 2.24.32 und keine Probleme.

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: SEGV bei Beenden des Programms

Beitrag von photor »

Hm. Das sieht her ähnlich aus:

Code: Alles auswählen

extra/gtk2 2.24.32-2 [Installiert]
    GObject-based multi-platform GUI toolkit (legacy)
extra/gtk3 1:3.24.18-1 [Installiert]
    GObject-based multi-platform GUI toolkit

Compiliert ist Lazarus mit Gtk2.

Ciao,
Photor

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: SEGV bei Beenden des Programms

Beitrag von theo »

photor hat geschrieben:Compiliert ist Lazarus mit Gtk2.


Dann müsste die IDE ja auch abschmieren? Tu sie das?
Passiert das nur unter dem Debugger?

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: SEGV bei Beenden des Programms

Beitrag von Winni »

Hi!

Ja, das passiert nur unter dem Debugger.

Ich hab mal komplett den Weg verfolgt, nachdem Form.Close ausgelöst wurde.
Ganz schön lang der Weg.
Aber: Bei all den Aktionen passierte kein Crash.
Und dann stept man mit F7 ein letztes Mal weiter:
Der Cursor steht in der lpr nach dem "Application.run" und vor dem letzten "end."
Und jetzt ein beherztes F7 und es crasht.

Und wie gesagt: Ohne Debugger gibt's keine Crash Meldung.
Was ja nicht heisst, dass es in den gtk libraries nicht knallt.
Nur lautlos.

Winni

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: SEGV bei Beenden des Programms

Beitrag von fliegermichl »

Winni hat geschrieben:Der Cursor steht in der lpr nach dem "Application.run" und vor dem letzten "end."
Und jetzt ein beherztes F7 und es crasht.


Hiernach werden die ganzen unit finalization Blöcke abgearbeitet.
Sowas ist wirklich schwierig zu finden. Ich würde mal versuchen den LazLogger zu verwenden und zumindest mal in den Units des Projektes in jedem finalization ein debugln('unit xxx'); einbauen.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: SEGV bei Beenden des Programms

Beitrag von charlytango »

photor hat geschrieben:Dann ein OpenFileDialog dazu gepackt, der den Namen des gewählten Files in ein TEdit schreibt (tut auch) und dann den Close-Button geclickt, und ich bekomme wieder den SEGV-Fehler.


Ich glaube mich erinnern zu können dass es da irgendwann mit dem OpenFileDialog Probleme gab (vielleicht auch noch gibt?). Der schmierte in der IDE (weiss nicht mehr ob mit Debugger oder ohne) schon mal ab. Entwickle unter Windows und habe vermieden den OpenFileDialog aus der IDE aufzurufen. Ohne IDE als ausführbares Programm gestartet hat es damals geklappt bzw keinen Fehler geworfen

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: SEGV bei Beenden des Programms

Beitrag von photor »

theo hat geschrieben:
photor hat geschrieben:Compiliert ist Lazarus mit Gtk2.


Dann müsste die IDE ja auch abschmieren? Tu sie das?
Passiert das nur unter dem Debugger?


Nee, die IDE läuft fein weiter (siehe auch die weiteren Beiträge). Beim Rein-steppen lande ich direkt im Assembler und da sehe ich jetzt nicht mehr viel (mit Assembler kenne ich mich zu wenig aus). BTW: ich vermisse den Call-Stack; muss ich da noch was einstellen?

charlytango hat geschrieben:Ich glaube mich erinnern zu können dass es da irgendwann mit dem OpenFileDialog Probleme gab (vielleicht auch noch gibt?). Der schmierte in der IDE (weiss nicht mehr ob mit Debugger oder ohne) schon mal ab. Entwickle unter Windows und habe vermieden den OpenFileDialog aus der IDE aufzurufen. Ohne IDE als ausführbares Programm gestartet hat es damals geklappt bzw keinen Fehler geworfen


Also ich habe es bislang nur mit Debugger getestet; ob's auch ohne abschmiert kann ich mal probieren. Ebenso, wenn ich ganz ohne IDE starte. In dem Fall könnte ich ja damit leben - für die Entwicklung muss ich dann halt das Programm vor dem nächsten Start erstmal stoppen, um es neu starten zu können. Wenn die Applikation dann fehlerfrei läuft ...

Ciao,
Photor

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 990
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: SEGV bei Beenden des Programms

Beitrag von kralle »

Moin,

hast Du mal die Suche hier im Forum genutzt?
https://www.lazarusforum.de/search.php?keywords=+SEGV&terms=all&author=&sc=1&sf=all&sr=posts&sk=t&sd=d&st=0&ch=300&t=0&submit=Suche

Die beiden Themen ganz unten helfen Dir auch nicht weiter?

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: SEGV bei Beenden des Programms

Beitrag von fliegermichl »

photor hat geschrieben: BTW: ich vermisse den Call-Stack; muss ich da noch was einstellen?


Ansicht -> Debuggerfenster -> Aufrufstack. Das klappt aber oft nicht so richtig.

Antworten