External: SIGSEGV in der Klasse TScreen.

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

External: SIGSEGV in der Klasse TScreen.

Beitrag von Maik81SE »

Moin zsm,

Ich steh gerade mal wieder im wald für eines meiner zwischentools.

Hintergrund des Aktuellen Projektes.

Ich habe auf einem Pi4 ein DSI, ein Monitor und ein Beamer laufen.
Da ich da aber nicht blind-links anfangen will meine eigene VeeJee-Software schreiben will, teste ich auf meinem PC die Ergebnisse der Grundroutinen.

Bei dem einfachsten aller Aufrufe

Code: Alles auswählen

Label1.Caption            := IntToStr(Screen.MonitorCount); 
erhalte ich dabei schon aber die verhasste Lieblingsmeldung "External: SIGSEGV"

Aufgerufen wird diese Zeile in der OnShow.
Sollten die Ergebnisse überzeugen soll dies in einer separaten Primär-Routine in die Settings wandern und im späteren Verlauf die Zielaufgabe des jeweiligen Anzeigegerätes definiert werden.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

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

Re: External: SIGSEGV in der classe TScreen.

Beitrag von theo »

Das kann ich nicht reproduzieren mit Lazarus 2.1.0 r64080 FPC 3.2.0 x86_64-linux-gtk2
Habe aber nur einen Bildschirm dran.

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: External: SIGSEGV in der classe TScreen.

Beitrag von Maik81SE »

theo hat geschrieben:
Sa 31. Okt 2020, 13:43
Das kann ich nicht reproduzieren mit Lazarus 2.1.0 r64080 FPC 3.2.0 x86_64-linux-gtk2
hmmm.
Lazarus Version Identisch, und das "FPC 3.0.4 x86_64-linux-gkt2 da groß anders sein soll glaube ich nicht...
Update auf 3.2 schlug am Do nach Update von debian 9.13 auf 10.6 wie fehl... :cry:
theo hat geschrieben:
Sa 31. Okt 2020, 13:43
Habe aber nur einen Bildschirm dran.
schon bei Programmieren arbeite ich immer mit 2 Monitoren, da man da auch mal mehr Zeilen lesen kann.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: External: SIGSEGV in der classe TScreen.

Beitrag von Maik81SE »

Habe mich mal weiter auf die Suche der möglichen Ursache gemacht und bin über die C-Bibliothek glibc-2.28 gestolpert.

Gibt es da etwas, was in den Dokus nicht beschrieben steht oder habe ich da einfach nur einen Wichtigen Aspekt im Zusammenhang mit dem Upgreate von debian 9.13 auf 10.6 inkl. Lazarus und FPC nicht auf dem Filter habe?

Libc6 ist mir der Version 2.28 Installiert.

nachdem ich soweit alles nachverfolgt habe, komme ich nunmehr auf die File "mcount.c" wo der Aufruf

Code: Alles auswählen

	toindex = *frompcindex;
fehlschlägt.
Da es sich hierbei um einen File in einem Systemordner handelt, werde ich einen Teufel tun und an diesen rumschrauben.
bin allergings für hilfreiche infos dankbar.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

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

Re: External: SIGSEGV in der classe TScreen.

Beitrag von theo »

Naja, schwer etwas dazu zu sagen.
Scheint mir von deiner Installation abzuhängen.
Nur soviel: Wenn du GTK2 benutzt, dann heisst die letztlich von Lazarus aufgerufene Funktion wohl:
gdk_screen_get_n_monitors ()
Meine GTK2 Version ist 2.24 / Glibc 2.26.
Das hilft aber wahrscheinlich auch nicht viel.

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: External: SIGSEGV in der classe TScreen.

Beitrag von Maik81SE »

theo hat geschrieben:
So 1. Nov 2020, 12:49
Naja, schwer etwas dazu zu sagen.
Scheint mir von deiner Installation abzuhängen.
Nur soviel: Wenn du GTK2 benutzt, dann heisst die letztlich von Lazarus aufgerufene Funktion wohl:
gdk_screen_get_n_monitors ()
Meine GTK2 Version ist 2.24 / Glibc 2.26.
Das hilft aber wahrscheinlich auch nicht viel.
Meine Glibc liegt bei 2.28.
Ob da die Zusatz Installation von 3 helfen könnte oder lieber gleich auf dem PI Arbeiten?

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

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: External: SIGSEGV in der classe TScreen.

Beitrag von Winni »

Maik81SE hat geschrieben:
Sa 31. Okt 2020, 13:35

Bei dem einfachsten aller Aufrufe

Code: Alles auswählen

Label1.Caption            := IntToStr(Screen.MonitorCount); 
erhalte ich dabei schon aber die verhasste Lieblingsmeldung "External: SIGSEGV"
Hi!

Rein ins blaue spekuliert:

Für manche Hardware-nahen Funktionen ist onShow (oder onCreate) einfach zu früh.

Häng die Routine doch mal in einen Button-Click und berichte, was passiert.
Ich kann hier nix testen, weil ich nur einen Bildschirm habe.

Winni

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: External: SIGSEGV in der classe TScreen.

Beitrag von Maik81SE »

Winni hat geschrieben:
So 1. Nov 2020, 16:03
Hi!

Rein ins blaue spekuliert:

Für manche Hardware-nahen Funktionen ist onShow (oder onCreate) einfach zu früh.

Häng die Routine doch mal in einen Button-Click und berichte, was passiert.
Ich kann hier nix testen, weil ich nur einen Bildschirm habe.

Winni
Daran liegt es schon mal nicht. :(

Aber wenn gerade diese Hardwarenahe Funktion für onShow / onCreate ungeeignet sein woll, werde ich auch dem PI wohl noch ein anderes Problem bekommen.
WIll das darauf aufbauende Programm so aufbauen, das der das Mainform auf den Großen Monitor läuft, das Frameform auf dem Beamer geschalten wird und die Sekundäre Steuerung auf mein DSI projiziert wird, welche über die Externe Hardware mit der Primären zsm spielen soll.

ABer um das zu sehen, werde ich nächstes WE mal mein PI4 bespaßen :D
Hoffe aber nich 'ne alte HDD oder 'nen 32/64GB Stick zu haben.
Dateianhänge
Bildschirmfoto_2020-11-01_17-25-39.png
Bildschirmfoto_2020-11-01_17-25-39.png (15.53 KiB) 3181 mal betrachtet
Bildschirmfoto_2020-11-01_17-26-18.png
Bildschirmfoto_2020-11-01_17-26-18.png (16.58 KiB) 3181 mal betrachtet

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: External: SIGSEGV in der classe TScreen.

Beitrag von af0815 »

Bei mir liegen die Initialisierungen im OnActivate. Mit dem ersten Aufruf wird das durchgeführt. Damit hast du auf allen Plattformen in etwa die gleiche Chance, das alles bereits sauber initialisiert ist. Generell wird bei mir auch nur das Mainform automatisch erstellt und alles andere per Programmcode. Damit gibt es keine Race Conditions zwischen den Fenstern und Datenmodulen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: External: SIGSEGV in der classe TScreen.

Beitrag von theo »

Das hier hat nichts mit dem Zeitpunkt zu tun.
Das funktioniert sogar OnCreate bei mir.
Wie oben gesagt, leitet die LCL die Anfrage relativ direkt weiter an "gdk_screen_get_n_monitors()".
Ich vermute das Problem von Maik81SE außerhalb von Lazarus, in der GTK Version oder in einer Kombination von Libs, die sich nicht vertragen.
Hast du sonst was Spezielles? Wayland?
Hast du mal einen Monitor abgehängt um zu schauen, was dann passiert?

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: External: SIGSEGV in der classe TScreen.

Beitrag von Maik81SE »

theo hat geschrieben:
Mo 2. Nov 2020, 11:25
Das hier hat nichts mit dem Zeitpunkt zu tun.
Das funktioniert sogar OnCreate bei mir.
Wie oben gesagt, leitet die LCL die Anfrage relativ direkt weiter an "gdk_screen_get_n_monitors()".
Ich vermute das Problem von Maik81SE außerhalb von Lazarus, in der GTK Version oder in einer Kombination von Libs, die sich nicht vertragen.
Hast du sonst was Spezielles? Wayland?
Hast du mal einen Monitor abgehängt um zu schauen, was dann passiert?
Was ist "Wyland"?
Bestimmt etwas spezielles, was du ansprichst.

Meldung, welche ich zuletzt geteilt habe, bezieht sich diesmal auf einen.
Ich vermute auch Mal stark ein Problem außerhalb. 😔😔 Und daher wirklich den Rechner komplett neu ziehen sollte.
Spart man sich Arbeit für distupgrate und hat mehr Aufwand. 😤😨

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: External: SIGSEGV in der classe TScreen.

Beitrag von Warf »

Maik81SE hat geschrieben:
Mo 2. Nov 2020, 17:51
Was ist "Wyland"?
Wayland ist ein Display Server mit dem anspruch X11 zu ersetzen. Einige Linux Distros haben angefangen Wayland als default zu verwenden. Wayland hat einige vorteile, aber auch ein paar inkompatibilitäten (z.b. funktionieren die proprietären intel Treiber nicht mit wayland).

Wenn du GTK2 als widgetset verwendetst, kann es gut sein das es mit Wayland inkompatibel ist, da GTK2 mittlerweile schon sehr alt ist und Wayland support erst mit GTK3.2 eingeführt wurde (vor allem da der erste release von wayland erst 2008 war und GTK3 bereits schon 2011 GTK2 abgelöst hat).

Generell kannst du ja mal versuchen das widgetset zu ändern, vielleicht hilfts. Im allgemeinen bin ich eh der Meinung das GTK2 ausgedient hat. Das Projekt ist seit 9 Jahren eingestellt, und mit GTK 4 am horizont (Corona hat das ganze ein bisschen nach hinten verschoben) sollte man sich wirklich überlegen ob man heute noch ein neues projekt mit GTK2 anfangen sollte

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: External: SIGSEGV in der Klasse TScreen.

Beitrag von Winni »

Hi!

Was ich alles an Ärger über Wayland in der Suse Mail-Liste lese, hat mich dazu bewogen,
erstmal die Finger davon zu lassen.

Wer nicht voller Experimentierfreude ist, sollte erstmal bei X-11 bleiben.

Winni

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: External: SIGSEGV in der Klasse TScreen.

Beitrag von Winni »

Hi!

Eben gelesen in der Open-Suse-factory mailing list:

Die akuelle version von KDE Plasma startet nicht mit Wayland.

Das ist nur ein Beispiel ,von vielen.

Winni

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: External: SIGSEGV in der Klasse TScreen.

Beitrag von Warf »

Winni hat geschrieben:
Di 3. Nov 2020, 11:35
Die akuelle version von KDE Plasma startet nicht mit Wayland.
Jap, wayland und KDE vertragen sich nicht gut, die linux distros die Wayland mitliefern (z.b. Debian oder Red Hat) machen das nur bei der Gnome3 version. KDE, XFCE und co laufen alle noch mit X11.

Wayland hat ein paar vorteile, z.b. vernünftiges monitorabhängiges skalieren. X11 kann zwar monitor abhängig skalieren, das skaliert aber pixel basiert (also bikubische pixelskalierung), währen wayland einfach tatsächlich die font sizes und co höher dreht, was viel besser aussieht.
Allerdings kann ich eh kein Wayland benutzen, da ich die NVidia treiber brauche (ich hab mir keine leistungstarke Grafikkarte geholt um die dann nicht benutzen zu können)

Antworten