What is the best way for using EurekaLog with packages?
Posted by Alexander Alexeev on 06 April 2009 15:11
First, you should enable EurekaLog for your main application, of course. And for working with packages (i.e. building a call stack), EurekaLog requires a debug information present in these packages. |
Enabling EurekaLog means two things:
- Installing exception hooks (by using ExceptionLog).
- Embedding debug information in EL format (done during compilation by EurekaLog's expert or ecc32/emake compilers).
At the current moment (v6.x) there is no way to enable/disable only one thing.
That is why you need to enable EurekaLog for packages too, if you want to have a proper call stacks for them. You usually should not place any exception processing code in your BPLs - place it only in the main application. Sometimes it is useful to separate all exception handling code in the new package.
You can also choose not to enable EurekaLog in packages, but rather supply an alternative source of debug information for BPLs. EurekaLog supports TD32, map files and JDBG debug information. Delphi supports generating TD32 and/or map-files out-of-the-box, but these formats are not very suitable for general-purpose applications.
Usually JDBG format is best choice. To use it, you need to download and install JCL (JEDI Code Library). All you need to do is to install it (there is a automatic GUI installer), open your projects, in Delphi main menu select Project/JCL Debug expert and enable all options there (set them to Enable for this project). Then make a build. That way you will have a debug info in your DLLs and there is no need to enable EurekaLog on them.
Feature of separated enabling EurekaLog and embedding debug information is planned for v7 release.
- My dll was not compiled with EurekaLog enabled, but EL is able to show proper call stack for it. How EL do this?
- I build my application with run-time packages. Is there a way to get call stack working for standard packages?
- 6.x: Message 'You cannot use the EurekaLog package in other packages'.