|This article needs additional citations for verification. (December 2013)|
A debug symbol is information that expresses which programming-language constructs generated a specific piece of machine code in a given executable module. Sometimes the symbolic information is compiled together with the module's binary file, or distributed in a separate file, or simply discarded during the compilation and/or linking. This information enables a person using a symbolic debugger to gain additional information about the binary, such as the names of variables and routines from the original source code. This information can be extremely helpful while trying to investigate and fix a crashing application or any other fault.
When debug symbols are embedded in the binary itself, the file can then grow significantly larger (sometimes by several times the original file size). To avoid this extra size, modern compilers and early mainframe debugging systems output the symbolic information into a separate file; for Microsoft compilers, this file is called a PDB file. Some companies ship the PDB on their CD/DVD to enable troubleshooting and other companies (like Microsoft, and the Mozilla Corporation) have special online servers from which it's possible to download the debug symbols separately. Microsoft's WinDBG debugger can be configured to automatically download debug symbols for Windows DLLs on demand as they are needed. The PDB debug symbols that Microsoft distributes are only partial (they include only public functions, global variables and their data types), whereas the Mozilla Corporation has similar infrastructure but distributes full debug information.
Apple uses the term "Symbolicate" to refer to the creation of debug symbols on Apple operating systems.
Symbolic debuggers have actually been around in the mainframe world almost since the first introduction of suitable computer displays on which to display the symbolic debugging information (and even earlier with symbolic dumps on paper). They were not restricted to high level compiled languages and were available also for Assembly language programs. For the IBM/360, these produced object code (on request) that included "SYM cards". These were normally ignored by the program loader but were useful to a symbolic debugger as they were kept on the same program library as the executable logic code.
Public symbol and source servers
- Microsoft Symbol Server
- Microsoft Reference Source Server: http://referencesource.microsoft.com/
- Mozilla Source Server: https://developer.mozilla.org/en/Using_the_Mozilla_source_server
- .NET libraries at SymbolSource: http://www.symbolsource.org/