GDB: сделать точку останова на функции класса в C ++ - PullRequest
1 голос
/ 26 марта 2019

Допустим, следующий класс:

class a {
   public:
      int getA(int a){
     return 5;
      }
      int getA(int a, int b){
     return 6;
      }
};

int main(){
   a cA;
   std::cout << cA.getA(5) << std::endl;

   return 0;
}

в GDB, я могу установить breakpoint для функции getA, используя:

b a::getA

Но это только устанавливает b для первой функции, как мне сделать b для второй функции (без использования номера строки, конечно)

Ответы [ 2 ]

3 голосов
/ 26 марта 2019

Добавьте еще одну строку к вашему main():

std::cout << cA.getA(2,3) << std::endl;

Теперь повторите ваш первоначальный эксперимент. Ваши результаты будут другими, теперь:

(gdb) b a::getA
Breakpoint 1 at 0x40089d: a::getA. (2 locations)

"2 местоположения" - это GDB, сообщающий, что теперь он внедрил точки останова для обеих перегруженных функций. Проход по коду подтвердит это.

Если символ разрешен для многократно перегруженных функций, команда b устанавливает точку останова для каждой из них.

Но поскольку 2-я перегруженная функция была встроенной и никогда не вызывалась в исходном коде, gcc даже не компилировал ее, и для gdb не было ничего, чтобы установить точку останова на.

0 голосов
/ 26 марта 2019

b a::getA(int,int) должен сделать свое дело.Даже тот, который уже работает, должен быть заменен на b a::getA(int).

Попробуйте сами здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...