Project raised exception class 'External SIGSEGV'.

Für Fragen rund um die Ide und zum Debugger
Antworten
Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

Hallo,

nach einigen Stunden habe ich eines von zwei Problemen lösen können.

System: WinXP SP3, Lazarus 0.9.26Beta (5. Okt. 2008), FPC 2.2.2
Projekt: TurboDelphi 2006 Explorer -> Delphi 7 PE (angepasst und neu gespeichert) -> Lazarus (konvertiert und angepasst).

Problem 1: Auf dem Hauptformular sollen mehrere Formulare ohne Titelleiste angezeigt werden. Nachdem ich soweit war, das der Compiler die EXE erstellt hat, erhielt ich die Fehlermeldung:
Project raised exception class 'External SIGSEGV'.
Der Quelltexteditor öffnet dann die "control.inc" und steht in der ersten Zeile der "function TControl.GetText: TCaption;". Nach einiger Weile konnte ich mit Hilfe des Debuggers feststellen, dass der Fehler bei diesem Befehl auftritt:

Code: Alles auswählen

fJob := TfrmJob.Create(NIL);
Der Borderstyle wird im FormCreate auf bsNone gesetzt. Auf Grund des Ergebnistyps der function bin ich auf die Idee gekommen, die Caption der Form zu entfernen. Damit trat der Fehler nicht mehr auf. Ursache dürfte jedoch ein Fehler bei der Konvertierung sein. Denn bei einem Testprojekt mit einem von Lazarus selbst erstellen Formular trat dieser Fehler nicht auf. Verwende ich darin das konvertierte, tritt er auf.

Problem 2: Anschliessend erhielt ich eine weitere Fehlermeldung:
Project raised exception class 'External SIGSEGV'.
Diesmal lag es daran, dass ich einem TMemo einen Tooltipp zuweisen wollte. Das Problem hängt mit dem Handle zusammen. Lösung vorerst: Auf Tooltipp verzichten. Befehl auskommentiert. Ist im Moment nicht so wichtig, als das ich dort Zeit investieren möchte.
Gruß Garfield

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von monta »

du kannst eventuell mal die beidem lfm-Dateien öffnen (Im Kontextmenü des Formulars) , und schauen, was der Unterschied bei den Formulareigenschaften ist. Wenn es bei der in Lazarus erstellen Form funktioniert, kann der Unterschied ja eigentlich nur in der lfm liegen.
Johannes

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

Stimmt! Werde ich mal machen.

Auf den ersten Blick ist da kein großer Unterschied:

Code: Alles auswählen

object frmJob: TfrmJob
  Left = 915
  Height = 536
  Top = 283
  Width = 412
  BorderIcons = []
  BorderStyle = bsNone
  Caption = 'frmJob'
  ClientHeight = 536
  ClientWidth = 412
  Font.Height = -11
  Font.Name = 'Tahoma'
  OnCreate = FormCreate
  OnShow = FormShow
  ParentFont = False
  LCLVersion = '0.9.26'
 
und

Code: Alles auswählen

object Form2: TForm2
  Left = 480
  Height = 307
  Top = 285
  Width = 400
  BorderIcons = []
  BorderStyle = bsNone
  Caption = 'Form2'
  ClientHeight = 307
  ClientWidth = 400
  ParentFont = False
  LCLVersion = '0.9.26'
Bei dem konvertierten ist da nur die Schriftart und die beiden Ereignisse zusätzlich drin. Mal schauen, ob es daran liegt.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

Es scheint doch nicht am Formular zu liegen, sondern an einer Komponente. Wenn ich das Formular nackig mache gibt es keinen Fehler. Mal weiter sehen.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

Möglicherweise liegt es an den Tooltipps. Als die raus waren, kam der Fehler auch nicht mehr. Müsste ich morgen noch mal versuchen, heute habe ich keine Zeit mehr dafür (Nachschicht).
Gruß Garfield

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Euklid »

An dieser Stelle mal einen allgemeinen Tipp:
Die Fehlermeldung mit dem SigSegV deutet immer auf eine Speicherzugriffsverletzung hin und gibt für sich genommen wenig Auskunft darüber, wo genau der Fehler entstanden ist. Die Ursache lässt sich nach meiner Erfahrung am Besten ausfindig machen, wenn man im Menü Compilereinstellungen im Reiter "Linken" die heaptrc einbindet. Ruft man das kompilierte Programm von der Konsole aus auf, wird dort der Aufrufstack ausgegeben, aus dem sich in der Regel mehr oder weniger direkt ablesen lässt, wo genau die Zugriffsverletzung aufgetreten ist. Das erleichtert das Debugging erheblich.

Wenn du nicht weiter kommst, kannst du den Aufrufstack hier posten, vielleicht hat einer der Forenmitglieder eine Idee.

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

Im Nachrichtenfenster gibt es eine Menge Meldungen von nicht initialisierten und nicht verwendeten Vaiablen. Letzteres weil ich einiges auskommentiert habe.

Wie meinst Du das mit de, heaptrc? Wird das bei Einstellungen (-k) eingetragen?
Gruß Garfield

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

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von theo »

Garfield hat geschrieben:Im Nachrichtenfenster gibt es eine Menge Meldungen von nicht initialisierten und nicht verwendeten Vaiablen. Letzteres weil ich einiges auskommentiert habe.

Wie meinst Du das mit de, heaptrc? Wird das bei Einstellungen (-k) eingetragen?
Compilereinstellungen -> Linken -> Heaptrc Unit....

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

:? Das habe ich übersehen, bin nach den Schaltern gegangen. Entschuldigung.

So sieht es aus, wenn ich die Anwendung starte, den Button zur Erstellung des Formulars anklicke und dann die Meldung "Error reading frmJob.Caption: Access violation" mit OK quittiere:

Code: Alles auswählen

D:\Projects\Lazarus\Test>project1
TApplication.HandleException Error reading frmJob.Caption: Access violation
  Stack trace:
  $0043B528
  $0043AEAB
  $004368BB
  $004725EE  INITCOMPONENT,  line 2866 of lresources.pp
  $0047246F  INITLAZRESOURCECOMPONENT,  line 2886 of lresources.pp
  $00471957  INITRESOURCECOMPONENT,  line 604 of lresources.pp
  $0041868D  TCUSTOMFORM__CREATE,  line 1391 of ./include/customform.inc
  $00419DE6  TFORM__CREATE,  line 2151 of ./include/customform.inc
  $0041F28A  TFORM1__BUTTON3CLICK,  line 64 of unit1.pas
  $0048F334  TCONTROL__CLICK,  line 2095 of ./include/control.inc
  $0049ED3F  TBUTTONCONTROL__CLICK,  line 57 of ./include/buttoncontrol.inc
  $0049F2F5  TCUSTOMBUTTON__CLICK,  line 185 of ./include/buttons.inc
  $0049F791  TBUTTON__CLICK,  line 329 of ./include/buttons.inc
  $0049F4AA  TCUSTOMBUTTON__WMDEFAULTCLICKED,  line 240 of ./include/buttons.inc
  $00409F59
  $004863D4  TWINCONTROL__WNDPROC,  line 4749 of ./include/wincontrol.inc
  $0051CBF3  DELIVERMESSAGE,  line 103 of lclmessageglue.pas
Heap dump by heaptrc unit
1559 memory blocks allocated : 338289/342480
1559 memory blocks freed     : 338289/342480
0 unfreed memory blocks : 0
True heap size : 229376 (112 used in System startup)
True free heap : 229264
Wenn ich Cancel wähle sieht es so aus:

Code: Alles auswählen

TApplication.HandleException Error reading frmJob.Caption: Access violation
  Stack trace:
  $0043B528
  $0043AEAB
  $004368BB
  $004725EE  INITCOMPONENT,  line 2866 of lresources.pp
  $0047246F  INITLAZRESOURCECOMPONENT,  line 2886 of lresources.pp
  $00471957  INITRESOURCECOMPONENT,  line 604 of lresources.pp
  $0041868D  TCUSTOMFORM__CREATE,  line 1391 of ./include/customform.inc
  $00419DE6  TFORM__CREATE,  line 2151 of ./include/customform.inc
  $0041F28A  TFORM1__BUTTON3CLICK,  line 64 of unit1.pas
  $0048F334  TCONTROL__CLICK,  line 2095 of ./include/control.inc
  $0049ED3F  TBUTTONCONTROL__CLICK,  line 57 of ./include/buttoncontrol.inc
  $0049F2F5  TCUSTOMBUTTON__CLICK,  line 185 of ./include/buttons.inc
  $0049F791  TBUTTON__CLICK,  line 329 of ./include/buttons.inc
  $0049F4AA  TCUSTOMBUTTON__WMDEFAULTCLICKED,  line 240 of ./include/buttons.inc
  $00409F59
  $004863D4  TWINCONTROL__WNDPROC,  line 4749 of ./include/wincontrol.inc
  $0051CBF3  DELIVERMESSAGE,  line 103 of lclmessagegHeap dump by heaptrc unit
1559 memory blocks allocated : 338289/342480
1552 memory blocks freed     : 337921/342104
7 unfreed memory blocks : 368
True heap size : 360448 (112 used in System startup)
True free heap : 359472
Should be : 359568
Call trace for block $0015A6A0 size 136
  $0040C5CB
  $0040728C
  $00440CD5
  $0041D7DB  TAPPLICATION__SHOWEXCEPTION,  line 1251 of ./include/application.inc
  $0041CF99  TAPPLICATION__HANDLEEXCEPTION,  line 968 of ./include/application.inc
  $0051CC46  DELIVERMESSAGE,  line 106 of lclmessageglue.pas
  $004F154D  WINDOWPROC,  line 2400 of win32callback.inc
  $7E368734
Call trace for block $000A2730 size 21
  $00406BDF
  $0041D772  TAPPLICATION__SHOWEXCEPTION,  line 1251 of ./include/application.inc
  $0041CF99  TAPPLICATION__HANDLEEXCEPTION,  line 968 of ./include/application.inc
  $0051CC46  DELIVERMESSAGE,  line 106 of lclmessageglue.pas
  $004F154D  WINDOWPROC,  line 2400 of win32callback.inc
  $7E368734
  $7E368816
  $7E37927B
Call trace for block $000B75A8 size 56
  $00406BDF
  $0041CF99  TAPPLICATION__HANDLEEXCEPTION,  line 968 of ./include/application.inc
  $0051CC46  DELIVERMESSAGE,  line 106 of lclmessageglue.pas
  $004F154D  WINDOWPROC,  line 2400 of win32callback.inc
  $7E368734
  $7E368816
  $7E37927B
  $7E3792E3
Call trace for block $000B78A8 size 64
  $0040C5CB
  $0040A4FB
  $0040A61D
  $0043B534
  $0043AEAB
  $004368BB
  $004725EE  INITCOMPONENT,  line 2866 of lresources.pp
  $0047246F  INITLAZRESOURCECOMPONENT,  line 2886 of lresources.pp
Call trace for block $000A2970 size 24
  $0040A485
  $0040A61D
  $0043B534
  $0043AEAB
  $004368BB
  $004725EE  INITCOMPONENT,  line 2866 of lresources.pp
  $0047246F  INITLAZRESOURCECOMPONENT,  line 2886 of lresources.pp
  $00471957  INITRESOURCECOMPONENT,  line 604 of lresources.pp
Call trace for block $000B7828 size 55
  $0040C5CB
  $0040728C
  $00440CD5
  $004450B6
  $0043B528
  $0043AEAB
  $004368BB
  $004725EE  INITCOMPONENT,  line 2866 of lresources.pp
Call trace for block $0009AA78 size 12
  $00409BC2
  $0043B528
  $0043AEAB
  $004368BB
  $004725EE  INITCOMPONENT,  line 2866 of lresources.pp
  $0047246F  INITLAZRESOURCECOMPONENT,  line 2886 of lresources.pp
  $00471957  INITRESOURCECOMPONENT,  line 604lue.pas
 of lresources.pp
  $0041868D  TCUSTOMFORM__CREATE,  line 1391 of ./include/customform.inc
Dabei wird die Anwendung geschlossen.

Nachtrag:

Wenn ich die Caption des Formulars rausnehme, bekomme ich zwar keine Fehlermeldung, aber die cmd überschlägt sich mit Ausgaben.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Project raised exception class 'External SIGSEGV'.

Beitrag von Garfield »

Habe noch einmal mit dem ursprünglichen Source begonnen und nach und nach einiges entfernt. Nach dem Entfernen der property Caption war der Fehler weg.

Code: Alles auswählen

type
  TfrmJob = class(TForm)
    ...
  private
    ...
    FCaption   : String;         // für GnuGetText notwendig
    ...
    procedure SetCaption(Value: String);
  published
    ...
    property Caption: String read FCaption write SetCaption;   // read wegen GnuGetText
  end;
Habe in der Anwendung die property Caption umbenannt und die Fehlermeldung bleibt aus. Da das Formular keine Titelleiste hat wird mit SetCaption der Titel in ein Panel geschrieben welches alTop ist.

Vielen Dank für die Unterstützung. :daumen:
Gruß Garfield

Antworten