This is the mail archive of the mailing list for the GDB project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

what does print /s do?


I'm having trouble understanding exactly what print /s is intended to
do. I've read the manual, and it says:


> Regard as a string, if possible. With this format, pointers to single-byte data are displayed as null-terminated strings and
> arrays of single-byte data are displayed as fixed-length strings. Other values are displayed in their natural types.
> Without this format, GDB displays pointers to and arrays of char, unsigned char, and signed char as strings. Single-byte
> members of a vector are displayed as an integer array.

I have two questions:

1. What is the distinction between "pointer to single-byte data" and
"pointers to and arrays of char, unsigned char, and signed char"?
Or is this just poorly worded?

2. Under what circumstances does supplying or not supplying /s make a
difference to the output? I can't find a case where it makes a
difference. For example, when printing a pointer-to-char (here, "string"
is a char array)

(gdb) p /s string
$14 = "abc"
(gdb) p string
$15 = "abc"

If I attempt to do the inverse, i.e., use /s to force interpreting a
non-ptr-to-char as a string, /s is ignored:

(gdb) p /s (int *)string
$16 = (int *) 0x804a018
(gdb) p (int *)string
$17 = (int *) 0x804a018



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]