11

I'd like to do printf style printing from GDB. For instance, I want to print a variable value, but with some text to describe what it is. Can it be done, and if so, can you give an example?

Sangeeth Saravanaraj
  • 16,027
  • 21
  • 69
  • 98
brianmearns
  • 9,581
  • 10
  • 52
  • 79

3 Answers3

14

You can very much use printf in gdb as follows:

(gdb) printf "%s", x
Hello world
(gdb)

You can do it by using call also

(gdb) call printf("%s", x)
Hello world
(gdb)

I prefer the former one!

http://beej.us/guide/bggdb/ is a simple and good reference for gdb

Sangeeth Saravanaraj
  • 16,027
  • 21
  • 69
  • 98
9

If you have a definition int i = 5;, you can print the value of i with formatted printing this way:

(gdb) printf "Val of my object: %d\n", i

Value of my object: 5

(gdb)

ouah
  • 142,963
  • 15
  • 272
  • 331
-1

How to use printf in GDB in order to write a custom description around your variable output

I want to print a variable value, but with some [custom] text to describe what it is.

Use printf with your description inside the format string:

printf "my custom description for variable 1: %s\n", my_variable_1

Example: use printf "My first environment variable is: %s", environ[0] to access the environ array of environment variable strings, which is automagically available in all C and C++ programs on Linux:

(gdb) printf "My first environment variable is: %s\n", environ[0]
My first environment variable is: SHELL=/bin/bash
(gdb)

You can print multiple variables and types, including GDB Convenience Variables too, such as the $i index variable shown below. Here, I am using two special format characters, %i and %s:

set $i = 0
printf "environ[%i]: %s\n", $i, environ[$i++]
# now keep pressing Enter for an amazing repeat effect!

Example command and output after pressing Enter 3 times. Now you can see in which index in the environ array of strings a given environment variable string is stored! Ex: SHELL=/bin/bash is stored inside environ[0]:

(gdb) set $i = 0
(gdb) printf "environ[%i]: %s\n", $i, environ[$i++]
environ[0]: SHELL=/bin/bash
(gdb) 
environ[1]: SESSION_MANAGER=local/gabriel:@/tmp/.ICE-unix/558952,unix/gabriel:/tmp/.ICE-unix/558952
(gdb) 
environ[2]: QT_ACCESSIBILITY=1
(gdb) 

How to get a lot of detailed info. about your variable and its type

but with some text to describe what it is.

For anyone landing here who just wants a really great description of a variable, use explore value, where value is your variable name.

Example output:

The value of 'value' is of type 'uint32_t' which is a typedef of type 'unsigned int'
'value' is a scalar value of type 'unsigned int'.
value = 1234

See my full answer here: gdb: show typeinfo of some data

See also

  1. My much longer answer where I use the printf information I just learned, above: How to print the entire environ variable, containing strings of all of your C or C++ program's environment variables, in GDB
Gabriel Staples
  • 36,492
  • 15
  • 194
  • 265