+-
通过GDB调用C++函数

在过去的几个星期里,我一直在使用GDBs的 "调用 "功能,它看起来非常有用。

 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)调用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在此usecase ?任何帮助是非常感激。

非常感谢

1
投票

首先,请注意,在你的代码中,你必须至少使用一次模板,用于 该具体实例 的模板,由编译器创建。其次,即使你这样做,名字也不会只是一个简单的 VectorPrint. 这将是类似于 VectorPrint<type>. 写完后试着按TAB键 call VectorPr 来查看gdb所看到的可用实例。

我已经写了一篇较长的解释 在你的另一个问题中.