Ich habe es hier entdeckt:
http://wiki.freepascal.org/Logging_exceptions
In diesem Fall müßt ihr Beispiel ohne Debugger starten:(wegen Division durch Null)
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Spin;
type
{ TForm1 }
TForm1 = class(TForm)
BtnMachDivDurchNull: TButton;
SpinEdit1: TSpinEdit;
procedure BtnMachDivDurchNullClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
procedure CustomExceptionHandler(Sender: TObject; E: Exception);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := @CustomExceptionHandler;
end;
procedure TForm1.BtnMachDivDurchNullClick(Sender: TObject);
var i: integer;
begin
i:=10 div SpinEdit1.Value;
end;
procedure TForm1.CustomExceptionHandler(Sender: TObject; E: Exception);
var
I: Integer;
Frames: PPointer;
Report: string;
begin
//aus http://wiki.freepascal.org/Logging_exceptions
if E <> nil then begin
Report := 'Fehlerklasse: ' + E.ClassName + LineEnding +
'Fehlernachricht: '+ LineEnding + E.Message + LineEnding;
end;
Report := 'Programmfehler! ' + LineEnding +
Report + LineEnding + LineEnding +
'Stacktrace:' + LineEnding +
BackTraceStrFunc(ExceptAddr);
Frames := ExceptFrames;
for I := 0 to ExceptFrameCount - 1 do
Report := Report + LineEnding + BackTraceStrFunc(Frames[I]);
ShowMessage(Report);
//Halt; // End of program execution
end;
end.
Das sieht denn etwa so aus: