Debug information can be provided using two methods.
•Debugging information (TDS or DWARF format)
•MAP files
Debug configurations of C++ Builder projects automatically generate debug information that provides symbols, filenames and line numbers.
However the release configurations of C++ Builder projects do not automatically generate debug information. You need to configure that yourself.
Here's how you do that. It's slightly different if you're building 32 bit applications rather 64 bit applications.
You need to set both compiler and linker settings to get debug information. Setting just one or the other will not give you debug information you can use.
Project Configuration
Change your project settings to target 32 bit builds.
Compiler Settings
Linker Settings
When you have edited the project options you need to rebuild the software for the options to take effect and create the debug information.
Project Configuration
Change your project settings to target 64 bit builds.
Compiler Settings
Linker Settings
When you have edited the project options you need to rebuild the software for the options to take effect and create the debug information.
MAP files are not generated by default. You need to enable the option to generate a detailed map file.
The method is the same for 32 bit and 64 bit C++ Builder.
Select the project configuration as shown in the Debugging Information section above, then modify the C++ Linker, Output settings.
Linker Settings
When you have edited the project options you need to rebuild the software for the options to take effect and create the debug information.
If you can create both debugging information and MAP files which should I use?
Coverage Validator uses this information to provide symbols, filenames and line numbers.
For the purposes of instrumenting your modules (EXE / DLL / etc) this information is used to identify functions and to identify line numbers.
For this purpose it does matter whether you use Debugging Information or MAP files.
Debugging Information
TDS format and DWARF format debugging information both appear to be accurate, in that they reflect the correct location of functions and line numbers in the module they represent.
Some additional data is present in the last symbol in any given source file. Our symbol reader handles this and removes the unwanted information.
MAP files
MAP file information does not appear accurate. It is good enough for resolving addresses into symbols, filenames and line numbers for creating callstacks and crash addresses, but it is not good enough for placing hooks at the correct place for every line in the module. Some modules get instrumented perfectly, while others fail for no apparent reason. Given the lack of information in a MAP file we can only assume that some of the data identified as lines indicating code are in fact lines indicating data in the code segment. Instrumenting data is not going to work - you're corrupting the data. This would explain why instrumenting these modules with MAP file information doesn't work.
Our recommendation
Although in some circumstances working with MAP file data from C++ Builder will work, we strongly recommend that you use TDS debugging information (32 bit builds) and DWARF debugging information (64 bit builds).