PDA

Ver la Versión Completa : StackTrace


mightydragonlor
08-06-2012, 23:53:47
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:

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:

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.

Casimiro Notevi
09-06-2012, 00:15:13
Gracias por la información.

Y recuerda poner títulos descriptivos ;)

mightydragonlor
09-06-2012, 00:29:43
Y recuerda poner títulos descriptivos ;)

Tienes razón Casimiro, la verdad se me pasó.