Debugging with GDB (September 2007)

i
Table of Contents
Summary of GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Free software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Contributors to GDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1 A Sample GDB Session . . . . . . . . . . . . . . . . . . . . 5
1.1 Loading the Executable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Setting Display width. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Setting Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Running the executable under GDB . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Stepping to the next line in the source program. . . . . . . . . . . . 6
1.6 Stepping into a subroutine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 Examining the Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.8 Printing Variable Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.9 Listing Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10 Setting Variable Values During a Session . . . . . . . . . . . . . . . . . 8
2 Getting In and Out of GDB . . . . . . . . . . . . . . . 11
2.1 Invoking GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 Choosing files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Choosing modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3 Redirecting WDB input and output to a file . . . . . 15
2.2 Quitting GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Shell commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 GDB Commands . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1 Command syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Command completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Getting help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Running Programs Under GDB . . . . . . . . . . . 23
4.1 Compiling for debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Starting your program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Arguments To Your Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.4 Program Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.5 Working directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.6 Program Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.7 Debugging a Running Pro ce ss . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.8 Killing the child proces s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.9 Debugging programs with multiple threads . . . . . . . . . . . . . . . 28
4.10 Debugging programs with multiple proces se s . . . . . . . . . . . . 31