Delphi call stack from exception…
Posted by jpluimers on 2017/08/02
MADExcept and Eurekalog are good products (and there is a JVCL tool as well). If you run your app in the IDE, you get the stack there – but for now, you need to acquire a third party package to get it runtime.I don’t disagree with the wish for a basic call stack tool, that works cross platform, but it would affect third party developers.
Whats the problem? You attach handlers to Exception.GetExceptionStackInfoProc, GetStackInfoStringProc and ` and just call a function that grabs the map or td32 info and generates the callstack – if you don’t want to spend any money for a high quality tool like madExcept (can even use it for free for non commercial use!) then use JclDebug.pas
I edited in some URLs above; the actual info is from: Why Delphi (like other developer environments) natively not included full call stack for every exception… [WayBack] (which is because it would kill even more of the Delphi 3rd party market).
And it taught me about this by madshi (of MADExcept fame):
DebugEngine is a collection of utils related to debug stuff (stack trace, CPU registers snaphot, debug info,…). Basically, I started to write a commercial error log plugin for Delphi, then I noticed that my internal framework got bigger and bigger. So I decided to share it with the community in hope it will be useful.
And there is the JCL ExceptDlg.pas which is quite easy to use: just add it anywhere to your project and the global exception handler will show you a stack trace provided you have a .MAP file or .TDS file (which contains TD32 symbol information) in the same directory as your .EXE.
–jeroen
Example code:
KMorwath said
WIth JCL, you can also convert the file to the “jdbg” format, which is smaller, and have it added to the exe. If you installed JCL IDE experts, new options appear under the “Project” menu. Outside the IDE (i.e. from a build tool), the MakeJclDbg.exe utility performs the same tasks.
If you add the exception dialog from File -> New -> Others and select the JCL Exception Dialog template, a wizard will guide you to select the options you need, and you’ll get a local copy of the dialog you can customize easily.
jpluimers said
Thanks. Really useful tips.
edwinyzh said
Wait! It didn’t occur to me that madshi (of delphi-detours-library frame) is also the author of madExcept? He’s great!
jpluimers said
he is indeed (:
abouchez said
An Open Source alternative, generating smaller .map file than competitors, is our SynLog unit – see http://blog.synopse.info/tag/log
Note that it works from old Delphi 5 up to 10.2!