1

过去几周我一直在使用 GDB 的“调用”功能,它看起来非常有用,如下所示的代码

 void VectorPrint(const std::vector<int>& v)
    {
      std::cout << "start printing vector\n";
        for (int i = 0; i < v.size(); ++i) { 
            std::cout << v[i]; 
            if (i != v.size() - 1) 
                std::cout << "\n"; 
        } 
        //std::cout << "\n printing end \n";
    }

(gdb) call VectorPrint(any1DVectorhere) 这将执行上述函数并在控制台上打印矢量内容。

我面临的问题是,如果模板化,我无法调用相同的函数,如下所示。GDB 无法识别模板化函数

template <typename Traits>
    template <typename myVec>
    void MyClass<Traits>::VectorPrint(const std::vector<myVec>& v)
    {
      std::cout << "start printing vector\n";
        for (int i = 0; i < v.size(); ++i) { 
            std::cout << v[i]; 
            if (i != v.size() - 1) 
                std::cout << "\n"; 
        } 
        //std::cout << "\n printing end \n";
    }

任何人都可以建议如何在这个用例中使用 GDB的调用功能吗?非常感谢任何帮助。

非常感谢提前!

4

1 回答 1

1

首先,请注意,您必须在代码中至少使用一次模板,以便编译器创建模板的特定实例化。其次,即使您这样做,名称也不会只是VectorPrint. 这将类似于VectorPrint<type>. 写入后尝试按 TABcall VectorPr以查看 gdb 正在查看的可用实例。

在你的另一个问题中写了一个更长的解释。

于 2020-05-08T18:49:00.907 回答