This post discusses and provide a quick overview of symbol files. Whenever an application or DLL is built, part of the compilation process is the creation of additional files – the symbol files. The symbol files themselves are not needed when running an application. However, if you encounter a situation where you need to debug an application or process, having the symbol files will make your life easier!
Symbol files contain different pieces of information, including:
- Names and addresses of global variables
- Names and locations of local variables
- Function names, and their entry points addresses
- Frame Pointer information
- Source file paths and line numbers
- Type information for variables, structures etc
A single symbol file may contain several hundred symbols. If all of this information was contained within the binary file for the application or DLL itself, the file sizes would be considerably larger. If you have ever had an occasion to install a checked (debug) build of an operating system, you have probably noticed that much more disk space is required than if you were installing the retail build of the same operating system. The reason for this is that the binaries in the checked build include some debugging symbols within the binary itself. Every build of an operating system or application – whether checked or retail, Service Pack 1 or Service Pack 2 has its own set of symbol files and you have to ensure that you match the symbol files with the correct version of your debugging target.