4.3.2. Running GDB
4.3.2. Running GDB This section will describe a basic execution of GDB, using the following simple program: hello.c The following procedure illustrates the debugging process in its most basic form. Procedure 4.1. Debugging a 'Hello World' Program Compile hello.c into an executable with the debug flag set, as in: gcc -g -o hello hello.c Ensure that the resulting binary hello is in the same directory as hello.c . Run gdb on the hello binary, that is, gdb hello . After several introductory comments, gdb will display the default GDB prompt: The variable hello is global, so it can be seen even before the main procedure starts: Note that the print targets hello[0] and *hello require the evaluation of an expression, as does, for example, *(hello + 1) : , list the source: The list reveals that the fprintf call is on line 8. Apply a breakpoint on that line and resume the code: Finally, use the command to step past the fprintf call, executing it: The following sections describe more complex applications of GDB.
#include <stdio.h> char hello[] = { "Hello, World!" }; int main() { fprintf (stdout, "%s\n", hello); return (0); } (gdb) gdb) p hello USD1 = "Hello, World!" (gdb) p hello[0] USD2 = 72 'H' (gdb) p *hello USD3 = 72 'H' (gdb) (gdb) p *(hello + 1) USD4 = 101 'e' (gdb) l 1 #include <stdio.h> 2 3 char hello[] = { "Hello, World!" }; 4 5 int 6 main() 7 { 8 fprintf (stdout, "%s\n", hello); 9 return (0); 10 } (gdb) br 8 Breakpoint 1 at 0x80483ed: file hello.c, line 8. (gdb) r Starting program: /home/moller/tinkering/gdb-manual/hello Breakpoint 1, main () at hello.c:8 8 fprintf (stdout, "%s\n", hello); (gdb) n Hello, World! 9 return (0);