Reputation: 3706
How can I print wstring in gdb?
Upvotes: 12
Views: 9063
Reputation: 3706
I did some research, and this is gdb PR716, PR1998, PR2264. Apparently this is an often-requested feature that is not yet implemented.
Upvotes: 0
Reputation: 3143
call printf %ls
only works sometimes, but to get it to work at all in gdb 6.3 you need the void
cast and linefeed \n
shown here:
call (void)printf("\"%ls\"\n",str.c_str())
here is a more reliable command you can put in your .gdbinit that also shows non-ASCII code points:
define wc_print echo " set $c = (wchar_t*)$arg0 while ( *$c ) if ( *$c > 0x7f ) printf "[%x]", *$c else printf "%c", *$c end set $c++ end echo "\n end
just enter wc
(short for wc_print
) with either a std::wstring
or wchar_t*
.
More detail at http://www.firstobject.com/wchar_t-gdb.htm
Upvotes: 9
Reputation: 34034
Suppose you've got a std::wstring str
. The following should work in gdb:
call printf("%ls", str._M_data())
(The -l option in printf makes it a long string, and I believe you need the "call
" statement because the ordinary gdb printf doesn't like that option.)
Upvotes: 1