如何在gdb for C++中为operator()设置断点?

DVK*_*DVK 1 c++ gdb breakpoints

我在C++类中有两个方法如下:

 class myClass {
     public:
         void operator()( string myString ) {
             // Some code
         }
         void myMethod() { ... }
 }
Run Code Online (Sandbox Code Playgroud)

对于常规方法,我可以简单地将GDB中的断点设置为:

b myClass::myMethod
Run Code Online (Sandbox Code Playgroud)

但是如何为第一种方法设置断点?

更新:

初始答案(b myClass :: operator())的建议不起作用:(

b myClass::operator()
Function "myClass::operator()" not defined.
Run Code Online (Sandbox Code Playgroud)

谢谢!

ezp*_*zpz 9

gdb还将采用特定行号的断点.例如 b file.cc:45


Seb*_*ian 5

一样的.myClass::operator()(string)是一种常规方法.

如果你有几个重载operator()方法(例如const和非const版本),gdb应该提供设置断点的选择:

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

您可能必须确保operator()(string)实际编译该方法.

编辑:

我测试了以下文件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;
}
Run Code Online (Sandbox Code Playgroud)

编译g++ test.cpp -o test,运行gdb test(版本GNU gdb 6.3.50-20050815(Apple版本gdb-1344)),键入start,然后才能设置断点.

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

b myClass::operator()

都奏效了.