I'd like to display a stack trace in an error dialog in Delphi 2007 (Win32).
Ideally, I'd like something like this:
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
And for the output to be like the Call Stack in the IDE:
MYPROGRAM.SomeFunction
MYPROGRAM.SomeProcedure
MYPROGRAM.MYPROGRAM
:7c817067 kernel32.RegisterWaitForInputIdle + 0x49
You may be interested in this article: "New Exception class in Delphi 2009 and above".
We use Exceptional Magic and it works really well for us. With it you can do something like this:
This yields a pretty detailed call stack:
Exceptional Magic is only $25 without the source, so it's relatively cheap. Hope that helps!
madExcept has a method StackTrace (in unit madStackTrace) that does that.
JEDI Code Library offers similar functionality in unit JclDebug.