Hola a todos, muchos de nosotros nos hemos preguntado como obtener el StackTrace en Lazarus para poder dar con el fragmento de código que nos genera excepciones, que a veces son muy difíciles de encontrar, para eso, les dejo una función que nos ayuda con esta tarea:
Código Delphi
[-]
function TForm1.DumpExceptionCallStack(E: Exception):String;
var
I: Integer;
Frames: PPointer;
Report: string;
begin
Report := 'Program exception! ' + LineEnding +
'Stacktrace:' + LineEnding + LineEnding;
if E <> nil then begin
Report := Report + 'Exception class: ' + E.ClassName + LineEnding +
'Message: ' + E.Message + LineEnding;
end;
Report := Report + BackTraceStrFunc(ExceptAddr);
Frames := ExceptFrames;
for I := 0 to ExceptFrameCount - 1 do
Report := Report + LineEnding + BackTraceStrFunc(Frames[i]);
Result := Report;
end;
Se usa de la siguiente forma:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
Var
number,I: Integer;
begin
Try
number := StrToInt('A');
except
on E : Exception do
Begin
ShowMessage(E.ClassName + ' error raised, with message : ' + E.Message
+ DumpExceptionCallStack(E));
End;
end;
end;
Se debe incluir la Unidad LCLProc, del paquete LCL, espero que les sirva de algo.
Saludos.