This bug was reported as Debian bug #666216 for gdb 7-0. According to Hector Oron, it is still reproducable with 7.7-1. p omits trailing 0 when printing a range of chars. To reproduce: # echo 'char foo[5] = { 1, 2, 0, 4, 0 };' > foo.c # gcc -c -g foo.c # gdb foo.o (gdb) p foo[0]@5 $1 = "\001\002\000\004" What I really wanted would be "{1, 2, 0, 4, 0}", like for other integer types, since I explicitly selected a single element and gave a range (@5), but if it must print it as a string, it should at least print all of the bytes. I know that's probably due to C's notorious confusion between integers and characters, and I also know there are other ways to dump some bytes in gdb. But still it seems plain wrong to print 4 chars if 5 items were explicitly requested, just because the last one happens to be 0. Note that it's not printing a 0-terminated string either: The embedded "\000" is printed; just one terminating 0 is omitted. (Which gets very confusing with larger arrays, if you look for something near the end, thinking the last one printed is the last one requested and then go hunting your off-by-one bug, only to realize later there wasn't any ...)
"\001\002\000\004\000" would be wrong because that has 6 elements and implies that there is another zero following.
> https://sourceware.org/bugzilla/show_bug.cgi?id=16933 > > --- Comment #1 from Andreas Schwab <schwab@linux-m68k.org> --- > "\001\002\000\004\000" would be wrong because that has 6 elements and implies > that there is another zero following. I see. But for the same reason this is then also wrong: # echo 'char foo[5] = { 1, 2, 0, 4 };' > foo.c # gcc -c -g foo.c # gdb foo.o (gdb) p foo[0]@4 $1 = "\001\002\000\004" So AIUI gdb must not print a range of chars as a string at all and should really print "{1, 2, 0, 4, 0}" or "{1, 2, 0, 4}", resp., as I'd actually prefer anyway.
See also PR16020.
*** Bug 21467 has been marked as a duplicate of this bug. ***
(In reply to Hannes Domani from comment #3) > See also PR16020. And also PR26842.