вызов функций C++ через GDB

Я использовал функцию «вызова» 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 в этом случае использования? Любая помощь высоко ценится.

Заранее большое спасибо !


person CutePoison    schedule 08.05.2020    source источник
comment
gdb или любой отладчик могут вызывать только уже существующие методы. Если в вашем коде никогда не возникало экземпляра шаблона для определенного типа, то этот вызов не может произойти. Убедитесь, что такой экземпляр существует, и покажите, как вы вызываете функцию в gdb.   -  person jblixr    schedule 08.05.2020


Ответы (1)


Во-первых, обратите внимание, что вы должны использовать шаблон хотя бы один раз в своем коде, чтобы эта конкретная реализация шаблона была создана компилятором. Во-вторых, даже если вы это сделаете, имя будет не просто VectorPrint. Это будет что-то похожее на VectorPrint<type>. Попробуйте нажать TAB после написания call VectorPr, чтобы увидеть доступные экземпляры, которые видит gdb.

Я написал более подробное объяснение этого в другом вашем вопросе.

person darcamo    schedule 08.05.2020