1 | \chapter{GNU Debugger} \label{GDB}
|
---|
2 |
|
---|
3 | \section{Introduction}
|
---|
4 | The GNU Project Debugger is a program that allows examination of what is going on
|
---|
5 | inside another program while it executes, or examines the state of a program
|
---|
6 | after it crashed \cite{Reference3}.
|
---|
7 |
|
---|
8 | \section{Debug Information}
|
---|
9 | In order to allow effective inspection of program state, the
|
---|
10 | debugger requires debugging information for a program. Debugging
|
---|
11 | information is a collection of data generated by a compiler and/or an assembler
|
---|
12 | program. This information is optional as it is only required for compilation,
|
---|
13 | and hence, it is normally not present during program execution when debugging
|
---|
14 | occurs. When requested, debugging information is stored in an object file, and it describes
|
---|
15 | information such as the type of each variable or function and
|
---|
16 | the correspondence between source line numbers and addresses in the executable
|
---|
17 | code \cite{Reference6}. Debugging information is requested via the \verb|-g|
|
---|
18 | flag during the compilation stage of the
|
---|
19 | program.
|
---|
20 |
|
---|
21 | The debugging information must be written out in a canonical format for
|
---|
22 | debuggers to read. DWARF is one of the supported debugging data formats, and its architecture is
|
---|
23 | independent and applicable to any language, operating system, or processor \cite{Reference7}. This format uses a data structure called DIE to represent
|
---|
24 | each variable, type, function, etc. A DIE is a pair: tag
|
---|
25 | and its attribute \cite{Reference8}.
|
---|
26 |
|
---|
27 | \section{Stack-Frame Information}
|
---|
28 | A stack frame, or frame for short, is a collection of all data associated with
|
---|
29 | one function call. A frame consists of parameters received from the function call, local variables declared in that
|
---|
30 | function, and the address where the
|
---|
31 | function returns. The frame-pointer register stores the address of a frame,
|
---|
32 | during execution of a call. A call stack can have many frames \cite{Reference12}.
|
---|
33 |
|
---|
34 | \section{Extending GDB}
|
---|
35 | GDB provides three mechanisms for extending itself. The first is
|
---|
36 | composition of GDB commands, the second is using the Python GDB API, and the third is defining new aliases for existing commands.
|
---|
37 |
|
---|
38 | \section{Symbol Handling}
|
---|
39 | Symbols are a key part of GDB's operation. Symbols can be variables, functions and
|
---|
40 | types. GDB has three kinds of symbol tables:
|
---|
41 | \begin{itemize}
|
---|
42 | \item \textcolor{ForestGreen}{Full symbol-tables (symtabs)}: These contain the main information
|
---|
43 | about symbols and addresses
|
---|
44 | \item \textcolor{ForestGreen} {Partial symbol-tables (psymtabs)}: These contain enough information to
|
---|
45 | know when to read the corresponding part of the full symbol-table.
|
---|
46 | \item \textcolor{ForestGreen}{Minimal symbol-tables (msymtabs)}: These
|
---|
47 | contain information extracted from non-debugging symbols.
|
---|
48 | \end{itemize}
|
---|
49 |
|
---|
50 | Debugging information for a large program can be very large, and reading all of
|
---|
51 | these symbols can be a performance bottleneck in GDB, affecting the user
|
---|
52 | experience. The solution is to lazily construct partial symbol-tables consisting of
|
---|
53 | only selected symbols, and then eagerly expand them to full symbol-tables when
|
---|
54 | necessary.
|
---|
55 | The psymtabs is constructed by doing a quick pass over the executable file's
|
---|
56 | debugging information.
|
---|
57 |
|
---|
58 | \section{Name Demangling in GDB}
|
---|
59 | The library \verb|libiberty| provides many functions and features that can be
|
---|
60 | divided into three groups:
|
---|
61 | \begin{itemize}
|
---|
62 | \item \textcolor{ForestGreen}{Supplemental functions}: additional functions
|
---|
63 | that may be missing in
|
---|
64 | the underlying operating system.
|
---|
65 | \item \textcolor{ForestGreen}{Replacement functions}: simple and unified equivalent functions for
|
---|
66 | commonly used standard functions.
|
---|
67 | \item \textcolor{ForestGreen}{Extensions}: additional functions beyond the standard.
|
---|
68 | \end{itemize}
|
---|
69 |
|
---|
70 | In particular, this library provides the \CC demangler that is used in GDB and
|
---|
71 | by \uC. A new
|
---|
72 | demangler can also be added in this library, which is what Rust did, and what
|
---|
73 | is necessary for \CFA.
|
---|