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

g0czyy6m  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(196)

当我用gdb进行调试时,我只想用'(gdb)p x'来打印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 '\006', __lx = 6 '\006'},
            __data_ = "you", '\000' <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"
有人能帮我吗?非常感谢。

hgc7kmma

hgc7kmma1#

怎样才能得到这样一个简单的结果:
这就是广发精品打印机的作用。
看起来您使用的是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中,这样就可以正常工作了。

相关问题