Debug symbol

A debug symbol is a special kind of symbol that attaches additional information to the symbol table of an object file, such as a shared library or an executable. 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

Debug symbols typically include not only the name of a function or global variable, but also the name of the source code file in which the symbol occurs, as well as the line number at which it is defined. Other information includes the type of the symbol (integer, float, function, exception, etc.), the scope (block scope or global scope), the size, and, for classes, the name of the class, and the methods and members in it. All of this additional information can take up quite a bit of space, especially the filenames and line numbers. Thus, binaries with debug symbols can become quite large, often several times the stripped file size.[2] To avoid this extra size, most operating system distributions ship binaries that are stripped, i.e. from which all of the debugging symbols have been removed. This is accomplished, for example, with the strip command in unix.

Some compilers will output the symbolic debugging information into a separate file, rather than placing it together with the binary.

SysV ABI

The SysV Application Binary Interface includes a specification for the format of debug symbols. This allows any compatible compiler or assembler to create debug symbols in a standardized format, and for any debugger, such as GDB, to gain access and display these symbols. For example, part of the important debug information includes the line of code in the source file which defines that symbol (a function or global variable), as well as symbols associated with exception frames.

Microsoft debug symbols

Microsoft compilers generate a file called a PDB file containing debug symbols. Some companies ship the PDB on their CD/DVD to enable troubleshooting and other companies (like Microsoft, and the Mozilla Corporation) allow downloading debug symbols from the Internet. The WinDBG debugger and the Visual Studio IDE 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. The Mozilla Corporation has similar infrastructure but distributes full debug information.

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.

Apple

On Apple platforms, debug symbols are optionally emitted during the build process as dSYM file(s). Apple uses the term "symbolicate" to refer to the replacement of addresses in diagnostic files with human readable values.[3]

History

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.

gollark: https://www.theregister.com/2019/03/05/ai_gaydar/ (headline is vaguely misleading)
gollark: I blatantly stole it from helloboi.
gollark: I may be referred to as car/cdr if desired.
gollark: The problem with spaces is that you can’t actually see them. So you can’t be sure they’re correct. Also they aren’t actually there anyway - they are the absence of code. “Anti-code” if you will. Too many developers format their code “to make it more maintainable” (like that’s actually a thing), but they’re really just filling the document with spaces. And it’s impossible to know how spaces will effect your code, because if you can’t see them, then you can’t read them. Real code wizards know to just write one long line and pack it in tight. What’s that you say? You wrote 600 lines of code today? Well I wrote one, and it took all week, but it’s the best. And when I hand this project over to you next month I’ll have solved world peace in just 14 lines and you will be so lucky to have my code on your screen <ninja chop>.
gollark: Remove the call stack and do trampolining or something?

See also

References

  1. "Debugging with Symbols". Windows Dev Center. Microsoft. Archived from the original on 2020-01-11. Retrieved 2020-01-11.
  2. "What are Symbols For?". TechNet. Microsoft. 2008-07-15.
  3. "Understanding and Analyzing iOS Application Crash Reports". iOS Developer Library. Apple, Inc. 2018-01-08 [2009-01-29]. Technical Note TN2151. Archived from the original on 2019-12-19. Retrieved 2020-01-11.

Public symbol and source servers

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.