如何在gdb中打印wstring

11

如何在gdb中打印wstring?

3个回答

8

printf %ls 命令有时会失效,但要让它在 gdb 6.3 中正常工作,则需要使用此处显示的 void 转换和换行符 \n

call (void)printf("\"%ls\"\n",str.c_str())

下面是一个更可靠的命令,您可以将其放入 .gdbinit 文件中,还可以显示非 ASCII 码点:

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

只需输入 wc(代表 wc_print),然后输入 std::wstringwchar_t*

更多详细信息请参考http://www.firstobject.com/wchar_t-gdb.htm


1
假设您有一个std::wstring str。以下内容应该在gdb中有效:
call printf("%ls", str._M_data())

printf 中的 -l 选项使其成为长字符串,我相信你需要 "call" 语句,因为普通的 gdb printf 不喜欢那个选项。


0

我做了一些研究,这是 gdb PR716, PR1998, PR2264。显然,这是一个经常被要求但尚未实现的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接