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. "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:
2. "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.
3. "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.
4. "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
5. "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 - EurekaLog will not store any symbol names in your executable. Instead, names will be offloaded to a standalone file with *.elsym extension. The file is placed into %APPDATA%\Neos Eureka S.r.l\EurekaLog\Symbols\ folder, for example: C:\Users\UserName\AppData\Roaming\Neos Eureka S.r.l\EurekaLog\Symbols\41C93167855F44A388459CD68A452E49_Project138.exe_2017_11_16_00_34.elsym. This folder is used as common database to store symbols for all compiled executable. EurekaLog Viewer will use this location to find a matching .elsym file when viewing a report without names. A compilation ID (41C93167855F44A388459CD68A452E49 in the example above) is used as prefix. It is used for searching. The rest of file name (Project138.exe_2017_11_16_00_34 in the example above) is used only for your convenience - for example, to locate and delete unnecessary files. It is not used for searching and could be deleted (e.g. 41C93167855F44A388459CD68A452E49.elsym is sufficient).
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)
Additionally, for your convenience, a copy of this file is placed to output folder - for example, C:\Projects\Win32\Debug\Project138.elsym for C:\Projects\Win32\Debug\Project138.exe. You can deploy Project138.elsym file to target machines if you want to have readable names on the target machine. This is optional, you don't have to deploy .elsym files for your executable to work.
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.
6. "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
Important Note: You will always see symbol names when running executable on developer machine. 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.
Hint: Caching passwords on developer's machine means that you can use large, complex, random passwords without having to memorize it.
7. "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.
8. "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).