[Gelöst] Sigsegv Error bei delay Aufruf
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Beim Comilieren kommt übrigens kurz eine Warnung:
link.res contains output sections did you forget -T
Unter
https://www.freepascal.org/faq.var#unix-ld219
steht
"Their is no way to remove the -T warning with earlier FPC versions, but it should not result in any problems." Keine Ahnung, ob das eine Bedeutung hat.
link.res contains output sections did you forget -T
Unter
https://www.freepascal.org/faq.var#unix-ld219
steht
"Their is no way to remove the -T warning with earlier FPC versions, but it should not result in any problems." Keine Ahnung, ob das eine Bedeutung hat.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Sigsegv Error bei delay Aufruf
Irgendwie greifst du auf Form2 zu, obwohl noch kein Speicher dafür reserviert wurde.
Sieht irgendwie nach einem fehlendem Create aus.
Sieht irgendwie nach einem fehlendem Create aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Sigsegv Error bei delay Aufruf
Create ist noch zu früh. Die Formulardaten werden später erst aus den Resourcen geladen.Mathias hat geschrieben: Mi 15. Jul 2020, 16:47 Irgendwie greifst du auf Form2 zu, obwohl noch kein Speicher dafür reserviert wurde.
Sieht irgendwie nach einem fehlendem Create aus.
Probier mal folgendes:
Code: Alles auswählen
TConfig = class ( TForm )
...
public
isLoaded : boolean;
constructor Create(aOwner : TComponent);
procedure Loaded; override;
end;
var config : TConfig;
implementation
constructor TConfig.Create(aOwner : TComponent);
begin
isLoaded := False;
...
end;
procedure TConfig.Loaded;
begin
inherited;
isLoaded := True;
end;
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Jetzt kommt schon bei dem AufrufCreate ist noch zu früh. Die Formulardaten werden später erst aus den Resourcen geladen.
Probier mal folgendes:Bevor du nun auf die Elemente von TConfig zugreifst, prüfst du ob Config.isLoaded true ist.Code: Alles auswählen
TConfig = class ( TForm ) ... public isLoaded : boolean; constructor Create(aOwner : TComponent); procedure Loaded; override; end; var config : TConfig; implementation constructor TConfig.Create(aOwner : TComponent); begin isLoaded := False; ... end; procedure TConfig.Loaded; begin inherited; isLoaded := True; end;
Code: Alles auswählen
if config.isLoaded // <- hier SIGSEGV Fehler
then delay (Config.SpinEdit1.Value)
else delay (200)
Selbst wenn ich in dem GPIOUnit alles auskommentiere und in uses Unix und BaseUnix entferne, kommt noch der Fehler.
Ich habe das Ganze jetzt mal vorläufig anders gelöst. IM GPIO Unit bei den delays nur Konstanten (kein Problem, da sich das dort wohl eh nicht ändern wird.) Im OnActivate und OnChange verzichte ich auf den Zugriff auf Komponenten der Config Form. Alle anderen Zugriffe auf die Config Form sind jetzt möglich, auch nach dem das Programm ein paar Zeilen gewachsen ist. Hoffe nur, dass mir das nicht später erneut um die Ohren fliegt. Das delay (Config.SpinEdit1.Value) kann ich jetzt auch selstamerweise ohne Fehler von einem anderen Unit aus aufrufen.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Sigsegv Error bei delay Aufruf
Code: Alles auswählen
if Assign(config) then delay(config...) else delay(200)
Das isLoad kann dann weg.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Da kommt beim Comilieren bei Assign die Meldung "Wrong number of paramters"Mathias hat geschrieben: Do 16. Jul 2020, 17:13Das könnte weiter helfen.Code: Alles auswählen
if Assign(config) then delay(config...) else delay(200)
Das isLoad kann dann weg.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Sigsegv Error bei delay Aufruf
Code: Alles auswählen
if config = nil then .....
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Über das config = NIL geht er jetzt drüber und stürzt im then Zweig beim delay ab.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Sigsegv Error bei delay Aufruf
Code: Alles auswählen
if config <> nil
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Dann geht er in den else Zweig und macht das delay (200).
Das Problem ist wohl, dass bei einem Form1.OnActivate die Resourcen der Form2 noch nicht z.V. stehen. Auch bei einem Form1.OnPaint geht es noch nicht.
Das Problem ist wohl, dass bei einem Form1.OnActivate die Resourcen der Form2 noch nicht z.V. stehen. Auch bei einem Form1.OnPaint geht es noch nicht.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Sigsegv Error bei delay Aufruf
Das wolltest du doch, solange config noch nicht erzeugt ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Ok, jetzt habe ich erst verstanden was Ihr meint. So kann ich das zumindest abfangen. Ist also einfach bei Lazarus so, dass die Resourcen von Form2 bei einem Form1 OnAcivate, OnDraw, OnChange etc. noch nicht initialisiert sind, sondern erst wenn ich auf einen Button klicke.
Vielen Dank für Eure Hilfe und Eure Mühe.
Vielen Dank für Eure Hilfe und Eure Mühe.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Sigsegv Error bei delay Aufruf
Du hast immer noch etwas nicht ganz verstanden.
Wen da mal dein ganzes Projekt in einer Zip hochlädst, entdecken wir vielleicht die Hauptursache deines Übels.
Wen da mal dein ganzes Projekt in einer Zip hochlädst, entdecken wir vielleicht die Hauptursache deines Übels.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 32
- Registriert: Mi 14. Aug 2019, 16:33
- OS, Lazarus, FPC: Lazarus 2.0.8, FPC 3.0.4, Linux, (Windows 7)
- CPU-Target: 64Bit / 32 Bit
- Wohnort: Umland München
Re: Sigsegv Error bei delay Aufruf
Ja, in der Tat. Das Programm funktioniert jetzt zwar korrekt mit allen Funktionen, aber unter der Haube macht es vollkommen verrückte Sachen. Ich habe z.B. mehrere Toggleboxen mit einem OnClick Event. Sollte also nur auslösen, wenn ich mit der Maus klicke. Jetzt stelle ich gerade fest, dass auch alle OnKlick Events automatisch ausgelöst werden, bevor die Dinge in der FormAvtivate Routine ausgeführt wurden.Mathias hat geschrieben: Do 16. Jul 2020, 19:33 Du hast immer noch etwas nicht ganz verstanden.
Wen da mal dein ganzes Projekt in einer Zip hochlädst, entdecken wir vielleicht die Hauptursache deines Übels.
Das führt dazu, dass das Programm versucht Relais zu schalten, die noch nicht initialisiert sind. Ist zwar kein Problem, da irgendwann die FormActivate Routine doch Ihren Dienst verrichtet und die Relais sauber auf die Ausgangswerte setzt, sobald die Form angezeigt wird. Der Fehler ist auf Benutzerebene zwar nicht sichtbar, aber dennoch chotisch.
Jetzt raucht mir der Kopf. Ich werde Morgen das Projekt einmal in einer ZIP hochladen.
- 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: Sigsegv Error bei delay Aufruf
Hi!
Vorsicht mit onActivate:
Je nach Betriebssystem wird das verschieden ausgeführt.
Linux macht das nur ein einziges Mal.
Windows macht das jedesmal wenn sich zB der Zustand von WSminimized zu einem anderen ändert.
Winni
Vorsicht mit onActivate:
Je nach Betriebssystem wird das verschieden ausgeführt.
Linux macht das nur ein einziges Mal.
Windows macht das jedesmal wenn sich zB der Zustand von WSminimized zu einem anderen ändert.
Winni