Chapter 10. Examining Data

The usual way to examine data in your program is with the print command (abbreviated p), or its synonym inspect. It evaluates and prints the value of an expression of the language your program is written in (refer to Chapter 14 Using gdb with Different Languages).

print expr, print /f expr

expr is an expression (in the source language). By default the value of expr is printed in a format appropriate to its data type; you can choose a different format by specifying /f, where f is a letter specifying the format; refer to Section 10.4 Output formats.

print, print /f

If you omit expr, gdb displays the last value again (from the value history; (refer to Section 10.8 Value history). This allows you to conveniently inspect the same value in an alternative format.

A more low-level way of examining data is with the x command. It examines data in memory at a specified address and prints it in a specified format. Refer to Section 10.5 Examining memory.

If you are interested in information about types, or about how the fields of a struct or a class are declared, use the ptype exp command rather than print. Refer to Chapter 15 Examining the Symbol Table.

10.1. Expressions

print and many other gdb commands accept an expression and compute its value. Any kind of constant, variable or operator defined by the programming language you are using is valid in an expression in gdb. This includes conditional expressions, function calls, casts, and string constants. It also includes preprocessor macros, if you compiled your program to include this information; refer to Section 6.1 Compiling for debugging.

gdb supports array constants in expressions input by the user. The syntax is {element, element…}. For example, you can use the command print {1, 2, 3} to build up an array in memory that is malloced in the target program.

Because C is so widespread, most of the expressions shown in examples in this manual are in C. Refer to Chapter 14 Using gdb with Different Languages, for information on how to use expressions in other languages.

In this section, we discuss operators that you can use in gdb expressions regardless of your programming language.

Casts are supported in all languages, not just in C, because it is so useful to cast a number into a pointer in order to examine a structure at that address in memory.

gdb supports these operators, in addition to those common to programming languages:

@

@ is a binary operator for treating parts of memory as arrays. Refer to Section 10.3 Artificial arrays, for more information.

::

:: allows you to specify a variable in terms of the file or function where it is defined. Refer to Section 10.2 Program variables.

{type} addr

Refers to an object of type type stored at address addr in memory. addr may be any expression whose value is an integer or pointer (but parentheses are required around binary operators, just as in a cast). This construct is allowed regardless of what kind of data is normally supposed to reside at addr.