【问题标题】:How to inspect elements in a C++ vector in gdb? [duplicate]如何在 gdb 中检查 C++ 向量中的元素? [复制]
【发布时间】:2021-09-29 19:23:26
【问题描述】:

我在 C++ 程序中有一个整数向量:

  1 #include <iostream>
  2 #include <vector>
  3 using std::vector;
  4 using std::cout;
  5 using std::endl;
  6
  7 int main()
  8 {
  9     vector<int> a;
 10     for (size_t i=0; i<7; ++i)
 11         a.push_back(i*2);
 12     cout << a.size() << endl;
 13     return 0;
 14 }

在 GDB 中,当我在第 12 行中断时,我可以检查 a.size() 的值。 但是,如果我尝试检查 a[1],GDB 会抱怨“找不到运算符 []”。 如果我试图检查 a.at(1),GDB 会抱怨“无法评估函数——可能是内联的”。 如何检查向量的内容?

【问题讨论】:

    标签: c++ vector gdb


    【解决方案1】:

    你可以定义一个函数

    void print(vector<int> A) {
        for (int i=0; i<A.size(); ++i)
            cout << A[i] << ' ';
        cout << endl;
    }
    

    然后在 GDB 中,你可以“调用 print(a)”来查看向量 a 的内容。

    顺便说一句,你在 GDB 中调用 a[i] 或 a.at(i) 失败的主要原因是,这些方法没有在你的程序中使用,所以它们没有被实例化。详情请查看https://stackoverflow.com/a/24131961/7588831

    【讨论】:

    • 如果我有一个整数向量和一个字符串向量,这是否意味着我必须定义一个 print_int() 和一个 print_str()?没有优雅的解决方案吗?
    • 您可以利用 C++ 中的“函数重载”特性。您定义“void print(vector A)”和“void print(vector A)”。然后在 GDB 中,你可以“调用 print(a)”和“调用 print(b)”。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多