This is "Debug information" page in EurekaLog project's options.
Debug information options
Options on "Debug information" page allow you to customize EurekaLog's debug information options.
1. "Debug information" option indicate if debug information info should be added. Debug information is necessary to build a human-readable call-stack and get textual descriptions of code's locations.
2. "Compress debug information" option will pack (compress) EurekaLog's options and debug information before injecting it into executable.
Enabling this option will produce smaller executables, but will add post-processing time (used for compression) and longer startup time (used for decompression).
Disable this option to get faster post-processing and startup, but significantly larger executables.
Memory footprint may vary depending on your actual data. We recommend to check memory usage with both positions.
Note: if your project is extremely large - then we recommend to disable "Check file for corruption" option too. Otherwise, CRC check may take too long for larger executables.
Here is a sample data: a 40 Mb executable has about 22 Mb .map file. This .map file is processed by EurekaLog to produce a total of 7 Mb (uncompressed) debug information, which consists of:
This debug information can be compressed into 3.5 Mb, therefore difference between uncompressed and compressed debug information is 4.5 Mb, meaning:
3. "Cache symbols names on load" option will cache symbol names in memory (RAM). Symbol names are human-readable unit names, class names, routines names. If this option is disabled then symbol names will be saved to disk. A small memory cache will still be used to cache names stored on disk.
Enabling this option will increase memory usage (to store cache), but will improve run-time performance, because names will be copied from memory, no disk access required.
Disabling this option will decrease memory usage, but will also decrease run-time performance due to disk access to read (load) individual symbol names.
We recommend to disable this option for larger projects. On smaller project this option does not make much difference.
Note: this option has no effect if "Compress debug information" option is disabled, because debug information will be stored in executable in a ready to use form, there will be no need to decompress it.
In the example above (see description for "Compress debug information" option): names information occupies 2 Mb for 40 Mb .exe.
4. "Store all names" option is a default behavior. It will save all symbols names in injected debug information: units names, classes names, routines names.
This option provides the best detalization.
"Store all names" option is used
We recommend to use this option when possible. Only use the following two options for shareware-like applications.
5. "Store unit names only" option disables storing names of classes, methods, functions and procedures inside executables. Unit names and line numbers are still saved.
Enable this option to minimize executable size and increase shareware protection.
Disable this option for best detalization.
Important Note: Be aware that class and routine names are lost forever!
"Store unit names only" option is used
6. "Store all names externally" option will completely remove all names from injected debug information. All names will be stored in a new file, which has same name as your project, but with *.elsym extension.
Note: this option disables "Debug information encryption password" option below, because no names will be stored inside executable (e.g. nothing to encrypt).
Important Note: Be aware that your executable will no longer be self-sufficient!
When this option is enabled:
Hint: you can check IDs by using EurekaLog PE Analyzer tool included with EurekaLog:
PE Analyzer tool will show you ID of the project (stays unchanged)
and ID of the build / compilation (changes on each recompile)
Important Note: A new *.elsym file is created in %APPDATA%\Neos Eureka S.r.l\EurekaLog\Symbols\ folder for each compilation. If you compile a lot - this folder will grow in size fast. You have to manage it by yourself. For example, you can delete unnecessary files, keeping only *.elsym files for your public releases (e.g. you have to track your compilation IDs for your releases). Or you can enable "Store all names externally" option only when you are compiling a public build. See also: Different EurekaLog settings for Debug and Release build configurations.
Note: you will see symbol names unencrypted when running executable on developer machine by default, because *.elsym file will be present.
Anyway, EurekaLog's-enabled executable will load symbol names from a matching .elsym file (assuming it was found).
"Store all names externally" option is used and the matching .elsym file is present
If no .elsym file was found - EurekaLog will not be able to display symbol names. Instead, the report is encoded for further completion.
"Store all names externally" option is used and the matching .elsym file is NOT present
Such report can be loaded into EurekaLog Viewer, which will be able to decode it and load all missed symbols (again, assuming that Viewer can find a matching .elsym file). For this reason - you have to keep a copy of .elsym file in the above mentioned %APPDATA% folder, so Viewer can find it.
Note: a note for shareware developers: while names for missing .elsym case may look like they are encrypted - it is not. No real symbol name is stored inside executable, therefore there is nothing to encrypt. The "encrypted" text simply encodes the IDs of the symbol name, such as: 41C93167855F44A388459CD68A452E49 and 172110. This is compilation ID and symbol index. This is what was encoded. No real symbol name was used.
7. "Debug information encryption password" option specifies optional password to encrypt all names in the injected debug information. EurekaLog uses TEA cipher to encrypt all debug information. This option can be combined with "Store all names" option or "Store unit names only" option.
If you set this option - you will not be able to view call stacks and assembly info in bug reports, it will be encrypted. To view encrypted report - you must use EurekaLog Viewer tool and specify password.
Use this option if you don't want for end-users to view information about your executable.
"Debug information encryption password" option is set
Note: you will see symbol names unencrypted when running executable on developer machine by default. Passwords are cached on developer's machine at HKEY_CURRENT_USER\Software\EurekaLab\Viewer\7.0\Passwords and HKEY_CURRENT_USER\Software\EurekaLab\Viewer\7.0\Hashes. A project ID is used for identification. See "Presaved password" option below.
Hint: caching passwords on developer's machine means that you can use large, complex, random passwords without having to memorize it.
8. "Presaved password" option enables local password cache on current machine. This option is global, not project-specific, and is not stored in project options.
Checked: Enable local password cache. Encrypted executables will run as unencrypted.
Unchecked: Disable local password cache. Encrypted executables will run as encrypted.
This option does not affect compiled executables. E.g. password-protected executables are always compiled as encrypted. We recommend to enable local cache to simplify local debugging. Disable local cache for testing purposes.
Note: this option have no effect if debug information password is not set.
9. "Trade memory for speed" option controls how ecc32/emake post-process your executable. This option does NOT affect your compiled executable.
Enabling this option will use more memory during post-processing, but post-processing will be faster. It is recommended for smaller projects.
Disabling this option will use less memory during post-processing, but post-processing will be slower. It is recommend for extremely large projects (e.g. when you have out of memory errors).