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 12: GDB Files 107
For example, if you want GDB to search for libraries in ‘/home/debugger/lib’ and
‘/tmp/lib’ before searching the default system directories for libraries, you can use this
setting:
GDB_SHLIB_PATH=/home/debugger/lib:/tmp/lib
With this setting, GDB searches the directories in the order specified until it finds a
library with the correct name.
In this example, if GDB encounters a library by the name of ‘/usr/lib/libsubs.sl’,
GDB searches first for ‘/home/debugger/lib/libsubs.sl’ and then for
‘/tmp/lib/libsubs.sl’. If neither of these exists, then GDB searches the
default system directories and finds ‘/usr/lib/libsubs.sl’.
In most cases, ‘GDB_SHLIB_PATH’ allows more flexibility than ‘GDB_SHLIB_ROOT’ because
it allows you to specify more than one path. However, there are some cases in which you
may want to choose to use ‘GDB_SHLIB_ROOT’.
For example, if you have more than one shared library with the same name but different
path names, you may want to use ‘GDB_SHLIB_ROOT’ because GDB searches for libraries
based on the full path name.
Note that ‘GDB_SHLIB_PATH’ may not give you the results you expect because GDB
searches for libraries that match only the name, regardless of the path, and always accepts
the first library that matches the name.
For example, if you want to use ‘/tmp/usr/lib/libsubs.sl’ and ‘/tmp/usr/share/lib/libsubs.sl’,
you can set ‘GDB_SHLIB_ROOT’ to ‘/tmp’. Now whenever GDB encounters a library with
the name ‘/usr/lib/libsubs.sl’ and ‘/usr/share/lib/libsubs.sl’, GDB looks at
‘/tmp/usr/lib/libsubs.sl’ and ‘/tmp/usr/share/lib/libsubs.sl’ respectively.
12.3 Errors reading symbol files
While reading a symbol file, GDB occasionally encounters problems, such as symbol
types it does not recognize, or known bugs in compiler output. By default, GDB does not
notify you of such problems, since they are relatively common and primarily of interest to
people debugging compilers. If you are interested in seeing information about ill-constructed
symbol tables, you can either ask GDB to print only one message about each such type of
problem, no matter how many times the problem occurs; or you can ask GDB to print more
messages, to see how many times the problems occur, with the set complaints command
(see Section 17.6 [Optional warnings and messages], page 252).
The messages currently printed, and their meanings, include:
inner block not inside outer block in symbol
The symbol information shows where symbol scopes begin and end (such as at
the start of a function or a block of statements). This error indicates that an
inner scope block is not fully contained in its outer scope blocks.
GDB circumvents the problem by treating the inner block as if it had the
same scope as the outer block. In the error message, symbol may be shown as
“(don’t know)” if the outer block is not a function.