Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Red Hat Enterprise Linux 9 Essentials Book now available.

Purchase a copy of Red Hat Enterprise Linux 9 (RHEL 9) Essentials

Red Hat Enterprise Linux 9 Essentials Print and eBook (PDF) editions contain 34 chapters and 298 pages

Preview Book

5.2.2. Running GDB

This section will describe a basic execution of GDB, using the following simple program:
hello.c
#include <stdio.h>
    
    char hello[] = { "Hello, World!" };

    int
    main()
    {
      fprintf (stdout, "%s\n", hello);
      return (0);
    }
The following procedure illustrates the debugging process in its most basic form.
Procedure 5.1. Debugging a 'Hello World' Program
  1. 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.
  2. Run gdb on the hello binary, i.e. gdb hello.
  3. After several introductory comments, gdb will display the default GDB prompt:
    (gdb)
    
  4. Some things can be done even before execution is started. The variable hello is global, so it can be seen even before the main procedure starts:
        gdb) p hello
        $1 = "Hello, World!"
        (gdb) p hello[0]
        $2 = 72 'H'
        (gdb) p *hello
        $3 = 72 'H'
        (gdb)
    
    Note that the print targets hello[0] and *hello require the evaluation of an expression, as does, for example, *(hello + 1):
        (gdb) p *(hello + 1)
        $4 = 101 'e'
    
  5. Next, list the source:
        (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      }
    
    The list reveals that the fprintf call is on line 8. Apply a breakpoint on that line and resume the code:
        (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);
    
  6. Finally, use the next command to step past the fprintf call, executing it:
        (gdb) n
        Hello, World!
        9         return (0);
    
The following sections describe more complex applications of GDB.

 
 
  Published under the terms of the Creative Commons License Design by Interspire