终端使用gdb调试.cpp文件,(gdb)p命令



当我使用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.pypython register_libcxx_printer_loader()命令放入~/.gdbinit中,然后一切正常™.

最新更新