Debugging with GDB (February 2008)
Table Of Contents
- Summary of GDB
- A Sample GDB Session
- Getting In and Out of GDB
- GDB Commands
- Running Programs Under GDB
- Stopping and Continuing
- Examining the Stack
- Examining Source Files
- Examining Data
- Using GDB with Different Languages
- Examining the Symbol Table
- Altering Execution
- GDB Files
- Specifying a Debugging Target
- HP-UX Configuration-Specific Information
- Summary of HP Enhancements to GDB
- HP-UX dependencies
- Supported Platforms and Modes
- HP-UX targets
- Support for Alternate root
- Specifying object file directories
- Fix and continue debugging
- Inline Support
- Debugging Macros
- Debugging Memory Problems
- When to suspect a memory leak
- Memory debugging restrictions
- Memory Debugging Methodologies
- Debugging Memory in Interactive Mode
- Debugging Memory in Batch Mode
- Debugging Memory Interactively After Attaching to a Running Process
- Configuring memory debugging settings
- Scenarios in memory debugging
- Stop when freeing unallocated or deallocated blocks
- Stop when freeing a block if bad writes occurred outside block boundary
- Stop when a specified block address is allocated or deallocated
- Scramble previous memory contents at malloc/free calls
- Detect dangling pointers and dangling blocks
- Detect in-block corruption of freed blocks
- Specify the amount of guard bytes for every block of allocated memory
- Comparison of Memory Debugging Commands in Interactive Mode and Batch Mode
- Heap Profiling
- Memory Checking Analysis for User Defined Memory Management Routines
- Commands to track the change in data segment value
- Thread Debugging Support
- Debugging MPI Programs
- Debugging multiple processes ( programs with fork and vfork calls)
- Debugging Core Files
- Printing the Execution Path Entries for the Current Frame or Thread
- Invoking GDB Before a Program Aborts
- Aborting a Command Line Call
- Instruction Level Stepping
- Enhanced support for watchpoints and breakpoints
- Debugging support for shared libraries
- Language support
- Enhanced Java Debugging Support
- Commands for Examining Java Virtual Machine(JVM) internals
- Support for stack traces in Java, C, and C++ programs
- Support for 64-bit Java, C, aC++ stack unwinding
- Enhanced support for C++ templates
- Support for __fpreg data type on IPF
- Support for _Complex variables in HP C
- Support for debugging namespaces
- Command for evaluating the address of an expression
- Viewing Wide Character Strings
- Support for output logging
- Getting information from a non-debug executable
- Debugging optimized code
- Visual Interface for WDB
- Starting and stopping Visual Interface for WDB
- Navigating the Visual Interface for WDB display
- Specifying foreground and background colors
- Using the X-window graphical interface
- Using the TUI mode
- Changing the size of the source or debugger pane
- Using commands to browse through source files
- Loading source files
- Editing source files
- Editing the command line and command-line history
- Saving the contents of a debugging session to a file
- Support for ddd
- Support for XDB commands
- GNU GDB Logging Commands
- Support for command line calls in a stripped executable
- Displaying the current block scope information
- Linux support
- The HP-UX Terminal User Interface
- XDB to WDB Transition Guide
- By-function lists of XDB commands and HP WDB equivalents
- Overall breakpoint commands
- XDB data formats and HP WDB equivalents
- XDB location syntax and HP WDB equivalents
- XDB special language operators and HP WDB equivalents
- XDB special variables and HP WDB equivalents
- XDB variable identifiers and HP WDB equivalents
- Alphabetical lists of XDB commands and HP WDB equivalents
- Controlling GDB
- Canned Sequences of Commands
- Using GDB under gnu Emacs
- GDB Annotations
- The gdb/mi Interface
- Function and purpose
- Notation and terminology
- gdb/mi Command Syntax
- gdb/mi compatibility with CLI
- gdb/mi output records
- gdb/mi command description format
- gdb/mi breakpoint table commands
- gdb/mi Data manipulation
- gdb/mi program control
- Miscellaneous GDB commands in gdb/mi
- gdb/mi Stack Manipulation Commands
- gdb/mi Symbol query commands
- gdb/mi Target Manipulation Commands
- gdb/mi thread commands
- gdb/mi tracepoint commands
- gdb/mi variable objects
- Reporting Bugs in GDB
- Installing GDB
- Index
Chapter 19: Using GDB under gnu Emacs 259
19 Using GDB under gnu Emacs
A special interface allows you to use gnu Emacs to view (and edit) the source files for
the program you are debugging with GDB.
To use this interface, use the command M-x gdb in Emacs. Give the executable file you
want to debug as an argument. This command starts GDB as a subprocess of Emacs, with
input and output through a newly created Emacs buffer.
Using GDB under Emacs is just like using GDB normally except for two things:
• All “terminal” input and output goes through the Emacs buffer.
This applies both to GDB commands and their output, and to the input and output
done by the program you are debugging.
This is useful because it means that you can copy the text of previous commands and
input them again; you can even use parts of the output in this way.
All the facilities of Emacs’ Shell mode are available for interacting with your program.
In particular, you can send signals the usual way—for example, C-c C-c for an interrupt,
C-c C-z for a stop.
• GDB displays source code through Emacs.
Each time GDB displays a stack frame, Emacs automatically finds the source file for
that frame and puts an arrow (‘=>’) at the left margin of the current line. Emacs uses a
separate buffer for source display, and splits the screen to show both your GDB session and
the source.
Explicit GDB list or search commands still produce output as usual, but you probably
have no reason to use them from Emacs.
Warning: If the directory where your program resides is not your current di-
rectory, it can be easy to confuse Emacs about the location of the source files,
in which case the auxiliary display buffer does not appear to show your source.
GDB can find programs by searching your environment’s PATH variable, so the
GDB input and output session proceeds normally; but Emacs does not get
enough information back from GDB to locate the source files in this situation.
To avoid this problem, either start GDB mode from the directory where your
program resides, or specify an absolute file name when prompted for the M-x
gdb argument.
A similar confusion can result if you use the GDB file command to switch to
debugging a program in some other location, from an existing GDB buffer in
Emacs.
By default, M-x gdb calls the program called ‘gdb’. If you need to call GDB by a different
name (for example, if you keep several configurations around, with different names) you can
set the Emacs variable gdb-command-name; for example,
(setq gdb-command-name "mygdb")
(preceded by M-: or ESC :, or typed in the *scratch* buffer, or in your ‘.emacs’ file) makes
Emacs call the program named “mygdb” instead.
In the GDB I/O buffer, you can use these special Emacs commands in addition to the
standard Shell mode commands: