manejo - Muestra la pila de llamadas en una aplicación Delphi Win32
manejo de excepciones en delphi (3)
Me gustaría mostrar un seguimiento de pila en un cuadro de diálogo de error en Delphi 2007 (Win32).
Idealmente, me gustaría algo como esto:
try
//do something
except on e : exception do
begin
//rollback a transaction or whatever i need to do here
MessageDlg(''An error has occurred!'' + #13#10 +
e.Message + #13#10 +
''Here is the stack trace:'' + #13#10 +
e.StackTrace,mtError,[mbOK],0);
end; //except
end; /try-except
Y para que la salida sea como la Pila de llamadas en el IDE:
MYPROGRAM.SomeFunction
MYPROGRAM.SomeProcedure
MYPROGRAM.MYPROGRAM
:7c817067 kernel32.RegisterWaitForInputIdle + 0x49
madExcept tiene un método StackTrace (en la unidad madStackTrace) que hace eso.
JEDI Code Library ofrece una funcionalidad similar en la unidad JclDebug.
Usamos Magia excepcional y funciona muy bien para nosotros. Con él puedes hacer algo como esto:
try
raise Exception.Create(''Something bad happened...'');
except
on e: Exception do begin
CallStack := TStringList.Create;
try
ExceptionHook.LogException; // Logs call stack
ExceptionHook.CallStack.Dump(CallStack);
ShowMessage(CallStack.Text);
finally
CallStack.Free;
end;
end;
end;
Esto produce una pila de llamadas bastante detallada:
Exception ''Exception'' in module BOAppTemplate.exe at 003F3C36
Something bad happened...
Module: BOAppUnit, Source: BOAppUnit.pas, Line 66
Procedure: MyProcedure
Call stack:
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:7C812AFB [kernel32.dll]
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:00404DF4 [BOAppTemplate.exe] System::__linkproc__ AfterConstruction
Recursive call (2 times):
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:007F4CE6 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 79)
:007F4D22 [BOAppTemplate.exe] Boappunit::TBOAppForm::Button1Click (BOAppUnit.pas, line 82)
:004604C2 [BOAppTemplate.exe] Controls::TControl::Click
:004487FB [BOAppTemplate.exe] Stdctrls::TButton::Click
:004488F9 [BOAppTemplate.exe] Stdctrls::TButton::CNCommand
:0045FFBA [BOAppTemplate.exe] Controls::TControl::WndProc
Exceptional Magic solo cuesta $ 25 sin la fuente, por lo que es relativamente barato. ¡Espero que ayude!
Le puede interesar este artículo: " Nueva clase de excepción en Delphi 2009 y superior ".