вызов функций C ++ через GDB - PullRequest
1 голос
/ 08 мая 2020

Я использовал функцию «вызова» 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";
    }

Может ли кто-нибудь предложить, как получить функциональность call , работающую с GDB в этом случае использования? Любая помощь приветствуется.

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

1 Ответ

1 голос
/ 08 мая 2020

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

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

...