当我使用gdb进行调试时,我只想使用'(gdb(px'来打印x的值,但结果非常复杂。终端命令如下:
(gdb) p word
输出:
$2 = {<std::__1::__basic_string_common<true>> = {<No data fields>}, static __short_mask = 1,
static __long_mask = 1,
__r_ = {<std::__1::__compressed_pair_elem<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, 0, false>> = {__value_ = {{__l = {__cap_ = 1970239750,
__size_ = 0, __data_ = 0x0}, __s = {{__size_ = 6 ' 06', __lx = 6 ' 06'},
__data_ = "you", ' 00' <repeats 19 times>}, __r = {__words = {1970239750, 0,
0}}}}}, <std::__1::__compressed_pair_elem<std::__1::allocator<char>, 1, true>> = {<std::__1::allocator<char>> = {<No data fields>}, <No data fields>}, <No data fields>},
static npos = 18446744073709551615}
我真正想要的只是__data_ = "you"
这个片段。
如何获得这样的简单结果:
$2 = "you"
有人能帮我吗?非常感谢。
如何获得这样的简单结果:
这就是GDB漂亮打印机的用途。
看起来您正在使用libc++
(可能还有Clang(。
来自libc++
文档:
默认情况下,GDB不支持漂亮地打印libc++符号。然而,libc++本身确实提供了漂亮的打印机。这些可以用作:
$ gdb -ex "source <libcxx>/utils/gdb/libcxx/printers.py"
-ex "python register_libcxx_printer_loader()"
<args>
您可以将source <libcxx>/utils/gdb/libcxx/printers.py
和python register_libcxx_printer_loader()
命令放入~/.gdbinit
中,然后一切正常™.