Hallo Aliobaba,
hast Du inzwischen eigenliche eine Lösung für das Problem gefunden?
Mich nervt es auch tierisch, das der Debugger mir Fehlerstellen in den "Lazarus-Units" anzeigt und nicht die Stelle in meinem Code die den Fehler auslöst.
Gruß Heiko
==========================================
Wenn ich unter Windows 8.1 Pro in Lazarus 1.6 eine neue Anwendung erstelle, auf dem Formular eine Button und eine Editfeld platziere und dann diesen nachweislich fehlerhaften Code ausführe:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var i: real;
Stringlist: TStringList;
begin
Stringlist.create;
i:=i/StrToInt(Edit1.Text);
Stringlist.clear;
end;
end.
Dann bekomme ich die Fehlermeldung
Projekt project1 hat eine Exception-Klasse >>External: SIGSEGV<< ausgelöst. Bei Adresse 10000BAB
.
Bestätge ich die Meldung mit [OK], lande ich nicht an der verursachenden Stelle im Quellcode
, sondern das Assemblerfenster geht an der angegebenen Adresse auf.
Nehme ich die obige Zeile raus und starte das Programm, dann führen eine Null im Editfeld oder einfach ein Klick auf den Button, zu der Stelle im Quellcode die damit Probleme hat.
Warum ist das nicht bei allen Fehlern so? Warum lande ich bei obigen Beispiel nicht bei
?