2009-12-23 2 views
1

У меня есть 2 метода в C++ класс следующим образом:Как установить контрольную точку для оператора() в gdb для C++?

class myClass { 
    public: 
     void operator()(string myString) { 
      // Some code 
     } 
     void myMethod() { ... } 
} 

Для обычного метода, я могу просто установить точку останова в GDB, как:

b myClass::myMethod 

Но как я поставил точку останова для первый метод?

UPDATE:

Предложения от первоначальных ответов (б MyClass :: оператор()) не работает :(

b myClass::operator() 
Function "myClass::operator()" not defined. 

Благодаря

+0

UPDATE: Предложения от первоначальных ответов (б MyClass :: оператор()) не работает :( – DVK

+0

О, в случае, если это имеет значение, GDB OS версии 6.4 – DVK

+0

Это работает для меня с помощью GDB 6.8 Возможно, что вам нужно. чтобы обновить версию gdb. – 2009-12-23 16:21:15

ответ

8

gdb также принимает точки останова при определенных номерах линий. Например, b file.cc:45

+0

У меня есть функция класса, прототипированная и определенная в файле заголовка. Когда я делаю 'b ClientClass.h: 804', GDB говорит мне« Нет строки 804 » . Есть идеи? –

6

Просто же myClass::operator()(string) является регулярным!. метод

Если у вас несколько перегруженных методов operator() (например, const и неконстантная версия), gdb должен предложить ch OICE, где установить точку останова:

http://sunsite.ualberta.ca/Documentation/Gnu/gdb-5.0/html_node/gdb_35.html#SEC35

Вы можете иметь, чтобы убедиться, что метод operator()(string) фактически составлен.

Edit:

Я проверил следующий файл test.cpp:

#include <string> 
#include <iostream> 

class myClass { 
     public: 
     void operator()(int i) { 
       std::cout << "operator()"; 
     } 

     void myMethod() { 
       std::cout << "myMethod"; 
     } 
}; 

int main() { 
    myClass c; 
    c(1); 
    c.myMethod(); 
    return 0; 
} 

Составлено с g++ test.cpp -o test, побежал gdb test (версия GNU GDB 6.3.50-20050815 (Apple версии gdb- 1344)), набрал start, и только тогда я мог установить контрольные точки.

b 'myClass::operator()(string)' и

b myClass::operator()

оба работали.

+0

К сожалению, предложения из первоначальных ответов (b myClass :: operator()) не работают - см. Обновленный Q для ошибки :( – DVK

+0

Вы пробовали 'b myClass :: operator() (string)'? – Sebastian

0
b myClass::operator() 
+0

К сожалению, предложения из исходных ответов (b myClass :: operator()) не работает - см. обновленный Q для ошибки :( – DVK

+0

Работает для меня. Я протестировал его, прежде чем я разместил этот ответ. – 2009-12-23 16:19:53

+0

Может ли это быть версией gdb? – DVK

1

Некоторые имена функций C++ могут быть очень трудно напечатать правильно. Хуже того, автозаполнение gdb часто путается с именами C++. Я использую этот трюк

gdb> break 'myClass::operator()<TAB> 

Обратите внимание на одиночную кавычку в начале функции. Это помогает автозаполнению gdb.

Смежные вопросы