try manejo exceptions excepciones catch delphi error-handling

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!