【问题标题】:Print elements of C++ string vector nicely in GDB在 GDB 中很好地打印 C++ 字符串向量的元素
【发布时间】:2022-01-09 13:03:54
【问题描述】:

我想在GDB中好好查看std::vector<std::string>的内容

我可以像在this 建议中一样查看它

print *(myVector._M_impl._M_start)@myVector.size()

但它会打印出属于 C++ STL 的所有内容,并且查看字符串的“实际”内容有点困难

有什么方法可以很好地查看元素而不显示 STL 容器的某些部分?

【问题讨论】:

  • 搜索漂亮的打印选项。
  • gdb 有漂亮的打印机。至少在 linux 发行版中,gdb 已经为 stl 容器提供了漂亮的打印机,而 print myVector 可以满足您的需求。矢量漂亮打印机很好地打印每个元素,然后使用该元素类型的相应漂亮打印机来实际打印元素。如果您不是这种情况,那么我们需要有关您如何安装 gdb 的更多信息。
  • 直接链接到漂亮的打印机方法:c++ - How to pretty-print STL containers in GDB? - Stack Overflow
  • @user202729 你应该把它作为一个答案,甚至更好,一个重复:-)

标签: c++ debugging vector gdb stdstring


【解决方案1】:

有什么方法可以很好地查看元素而不显示 STL 容器的某些部分?

您要么有一个非常旧的 GDB,要么有一些非标准设置。

这是在 Fedora-34 系统上的样子默认 GDB 安装

(gdb) list
1       #include <string>
2       #include <vector>
3
4       int main()
5       {
6         std::vector<std::string> v;
7         v.push_back("abc");
8         v.push_back("abcdef");
9         v.push_back("ghi");
10      }
(gdb) b 9
Breakpoint 1 at 0x401378: file t.cc, line 9.
(gdb) run
Starting program: /tmp/a.out
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Breakpoint 1, main () at t.cc:9
9         v.push_back("ghi");
(gdb) p v
$1 = std::vector of length 2, capacity 2 = {"abc", "abcdef"}
(gdb) n
10      }
(gdb) p v
$2 = std::vector of length 3, capacity 4 = {"abc", "abcdef", "ghi"}
(gdb) q

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多