9

如何在 gdb 中打印 wstring?

4

3 回答 3

8

call printf %ls有时只能工作,但要让它在 gdb 6.3 中工作,你需要这里显示的强制转换void和换行\n

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

这是一个更可靠的命令,您可以将其放入您的 .gdbinit 中,该命令还显示非 ASCII 代码点:

定义 wc_print
回声“
设置 $c = (wchar_t*)$arg0
而 ( *$c )
  如果 ( *$c > 0x7f )
    printf "[%x]", *$c
  别的
    printf "%c", *$c
  结尾
  设置 $c++
结尾
回声“\n
结尾

只需使用 a或输入wc(缩写) 。wc_printstd::wstringwchar_t*

更多详细信息,请访问 http://www.firstobject.com/wchar_t-gdb.htm

于 2009-09-10T16:48:49.287 回答
1

假设你有一个std::wstring str. 以下应该在 gdb 中工作:

call printf("%ls", str._M_data())

( printf 中的 -l 选项使它成为一个长字符串,我相信您需要 " call" 语句,因为普通的 gdb printf 不喜欢该选项。)

于 2008-09-19T21:45:10.350 回答
0

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

于 2008-09-19T21:45:54.917 回答