Unerklärliche external SIGSEGV

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

Unerklärliche external SIGSEGV

Beitragvon fpGUIcoder » 18. Nov 2015, 11:48 Unerklärliche external SIGSEGV

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?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
fpGUIcoder
 
Beiträge: 199
Registriert: 20. Okt 2015, 22:13

Beitragvon TBug » 18. Nov 2015, 13:05 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



.
TBug
 
Beiträge: 116
Registriert: 2. Sep 2015, 10:09
OS, Lazarus, FPC: Lazaurus 1.4.2 | 
CPU-Target: Windows
Nach oben

Beitragvon Socke » 18. Nov 2015, 21:04 Re: Unerklärliche external SIGSEGV

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???

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.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2374
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon TBug » 19. Nov 2015, 10:46 Re: Unerklärliche external SIGSEGV

Socke hat geschrieben:Die Ursache für die SIGSEGV muss nicht dort liegen, wo der Debugger hin springt.

Genau dies wollte ich mit meinem Beispiel verdeutlichen.

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.


.
TBug
 
Beiträge: 116
Registriert: 2. Sep 2015, 10:09
OS, Lazarus, FPC: Lazaurus 1.4.2 | 
CPU-Target: Windows
Nach oben

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried