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 7: Examining Source Files 59
reverse-search regexp
The command ‘reverse-search regexp ’ checks each line, starting with the
one before the last line listed and going backward, for a match for the regexp.
It lists the line(s) that is found. You can abbreviate this command as rev.
7.3 Specifying source directories
Executable programs sometimes do not record the directories of the source files from
which they were compiled. Even when they do, the directories can be moved between the
compilation and your debugging session. GDB has a list of directories to search for source
files; this is called the source path. Each time GDB looks for a source file, it tries all the
directories in the list, in the order they are present in the list, until it finds a file with the
desired name. Note that the executable search path is not used for this purpose. Neither
is the current working directory, unless it happens to be in the source path.
If GDB cannot find a source file in the source path, and the object program records a
directory, GDB tries that directory too. If the source path is empty, and there is no record
of the compilation directory, GDB looks in the current directory as a last resort.
Whenever you reset or rearrange the source path, GDB clears out any information it has
cached about where the source files are located and where each line is in the respective file.
When you start GDB, its source path includes only ‘cdir’ and ‘cwd’, in that order.
To add other directories, you can use the directory command.
directory dirname ...
dir dirname ...
Add directory dirname to the front of the source path. Several directory names
may be given to this command, separated by ‘:’ (‘;’ on MS-DOS and MS-
Windows, where ‘:’ usually appears as part of absolute file names) or a white-
space. You can specify a directory that is already in the source path; this moves
it forward, so GDB searches it sooner.
You can use the string ‘$cdir’ to refer to the compilation directory (if one
is recorded), and ‘$cwd’ to refer to the current working directory. ‘$cwd’ is
not the same as ‘.’. The former tracks the current working directory as it
changes during your GDB session, while the latter is immediately expanded to
the current directory at the time you add an entry to the source path.
directory
Reset the source path to empty again. This requires confirmation from the
user.
show directories
Print the source path and display the directories it contains.
If your source path is cluttered with directories that are no longer of interest, GDB can
end up detecting the wrong version of the source. To correct this situation, follow these
steps:
1. Use directory with no arguments to reset the source path to empty.
2. Use directory with suitable arguments to reinstall the directories you want in the
source path. You can add all the directories in one command.