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 22: Reporting Bugs in GDB 327
22 Reporting Bugs in GDB
Your bug reports play an essential role in making GDB reliable.
Reporting a bug may help you by bringing a solution to your problem, or it may not.
But in any case the principal function of a bug report is to help the entire community by
making the next version of GDB work better. Bug reports are your contribution to the
maintenance of GDB.
In order for a bug report to serve its purpose, you must include the information that
enables us to fix the bug.
22.1 Have you found a bug?
If you are not sure whether you have found a bug, here are some guidelines:
• If the debugger gets a fatal signal, for any input whatever, that is a GDB bug. Reliable
debuggers never crash.
• If GDB produces an error message for valid input, that is a bug. (Note that if you’re
cross debugging, the problem may also be somewhere in the connection to the target.)
• If GDB does not produce an error message for invalid input, that is a bug. However,
you should note that your idea of “invalid input” might be our idea of “an extension”
or “support for traditional practice”.
• If you are an experienced user of debugging tools, your suggestions for improvement of
GDB are welcome in any case.
22.2 How to report bugs
If you obtained GDB (Hewlett-Packard Wildebeest (based on GDB 5.0-hpwdb-
20000516)) as part of your HP ANSI C, HP ANSI C++, or HP Fortran compiler kit, report
problems to your HP Support Representative.
If you obtained GDB (Hewlett-Packard Wildebeest (based on GDB 5.0-hpwdb-
20000516)) from the Hewlett-Packard Web site, report problems to your HP Support
Representative. Support is covered under the support contract for your HP compiler.
The fundamental principle of reporting bugs usefully is this: report all the facts. If you
are not sure whether to state a fact or leave it out, state it!
Often people omit facts because they think they know what causes the problem and
assume that some details do not matter. Thus, you might assume that the name of the
variable you use in an example does not matter. Well, probably it does not, but one cannot
be sure. Perhaps the bug is a stray memory reference which happens to fetch from the
location where that name is stored in memory; perhaps, if the name were different, the
contents of that location would fool the debugger into doing the right thing despite the bug.
Play it safe and give a specific, complete example. That is the easiest thing for you to do,
and the most helpful.
Keep in mind that the purpose of a bug report is to enable us to fix the bug. It may
be that the bug has been reported previously, but neither you nor we can know that unless
your bug report is complete and self-contained.