Debug symbol

From Wikipedia, the free encyclopedia
Jump to: navigation, search

A debug symbol is information that expresses information from a symbol table of a binary module, a programming-language construct that describes binary code. This information allows a symbolic debugger to gain access to information from the source code of the binary, such as the names of identifiers, including variables and routines.

The symbolic information may be 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 can be helpful while trying to investigate and fix a crashing application or any other fault.[1]

Embedded symbols[edit]

When debug symbols are embedded in the binary itself, the file can then grow significantly larger[why?] (sometimes by several times the original file size).[2] To avoid this extra size, modern compilers and early mainframe debugging systems output the symbolic information into a separate file[clarification needed].

Binary distribution of symbols[edit]

Microsoft compilers[which?] generate a file called a PDB file.[clarification needed] Some companies[which?] ship the PDB on their CD/DVD to enable troubleshooting[how?] and other companies (like Microsoft, and the Mozilla Corporation) allow downloading debug symbols from the Internet. The WinDBG debugger can be configured to automatically download debug symbols for Windows DLLs on demand. The PDB debug symbols that Microsoft distributes include only public functions, global variables and their data types.[clarification needed] The Mozilla Corporation has similar infrastructure[which?] but distributes full debug information.[why?]

Both Microsoft and Mozilla also offer the source code (Microsoft provides certain components, such as most of the .NET Framework, whereas Mozilla offers full source) to make debugging easier.[clarification needed]

Apple uses the term "Symbolicate" to refer to the creation of debug symbols on Apple operating systems.[3]


Symbolic debuggers have existed since the mainframe era, 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 usually 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[edit]


  1. ^ "Windows Dev Center - Debugging with Symbols". 
  2. ^ "TechNet - What are Symbols For?". Technet. 
  3. ^ "iOS Developer Library - Understanding and Analyzing iOS Application Crash Reports". 

See also[edit]