Hallo,
ich sthe vor einem mir unerlärlichen Problem. Ich erhalte eine external SIGSEGV an einer Stelle, wo eine Multiplikation stattfindet. Jedenfalls springt der Debugger auf solch eine Programmzeile. Eine Division durch könnte ich als Ursache nachvollziehen und den Quellcode anpassen, aber bei einer Multplikation? AUf einer CPU, in der der mth. Coprozessor integriert ist???
Ich lade mal einen Screenshot hoch, wo zu sehen ist, was ich meine:
Die Exception tritt im Demoprogramm agg_canvas_test.lpr der fpGUI 1.2 auf.
Was ist da los?
Unerklärliche external SIGSEGV
-
- Beiträge: 199
- Registriert: Di 20. Okt 2015, 23:13
-
- Beiträge: 179
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: Unerklärliche external SIGSEGV
Ich kann DIr zwar momentan nicht helfen, aber teste einmal den unten stehenden Code und Du wirst eine ähnliche Überraschung erleben.
.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormClick(Sender: TObject);
var
lSingle: Single;
lDouble: Double;
lDummy: Integer;
begin
lDouble := 0;
lDouble := 888888888888888888888888888888888888888888888888888888888888888888888888888888888888;
lSingle := lDouble * 0.5;
lDummy := 0;
lDouble := 0;
end;
end.
Projekt project1 hat Exception-Klasse »External: SIGFPE« ausgelöst.
In Datei 'unit1.pas' in Zeile 46
.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Unerklärliche external SIGSEGV
Hier geht es nicht um eine SIGFPE sondern um eine SIGSEGV. Das heißt: die mathematische Operation ist nebensächlich. Es wird auf einen Speicherbereich zugegriffen, der deinem Programm nicht zugeteilt wurde (z.B. Objekt wurde bereits freigeben). Die Ursache für die SIGSEGV muss nicht dort liegen, wo der Debugger hin springt.fpGUIcoder hat geschrieben:Ich erhalte eine external SIGSEGV an einer Stelle, wo eine Multiplikation stattfindet. Jedenfalls springt der Debugger auf solch eine Programmzeile. Eine Division durch könnte ich als Ursache nachvollziehen und den Quellcode anpassen, aber bei einer Multplikation? AUf einer CPU, in der der mth. Coprozessor integriert ist???
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 179
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: Unerklärliche external SIGSEGV
Genau dies wollte ich mit meinem Beispiel verdeutlichen.Socke hat geschrieben:Die Ursache für die SIGSEGV muss nicht dort liegen, wo der Debugger hin springt.
Auch in meinem Beispiel ist die Ursache des Fehlers nicht an der Stelle zu suchen, an der sie in Erscheinung tritt und in welche der Debugger springt. Die Ursache liegt schon weiter oben im Code.
.