2009-12-23 49 views
1

我在C++类2种方法如下:如何在gdb中为C++设置operator()的断点?

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

对于一个普通的方法,我可以简单的设置断点GDB为:

b myClass::myMethod 

但是我怎么设置断点为第一种方法?

UPDATE:

从最初的答案的建议(B MyClass的::运算符())不工作:(

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

感谢

+0

UPDATE: 从最初的答案的建议(B MyClass的::运算符())不工作:( – DVK 2009-12-23 16:13:04

+0

哦,万一它很重要,GDB操作系统版本6.4 – DVK 2009-12-23 16:14:06

+0

它为我用gdb 6.8也许你所需要的。升级你的gdb版本 – 2009-12-23 16:21:15

回答

8

gdb也会在特定的行号码处取得断点。例如 b file.cc:45

+0

我有一个类函数在一个头文件中原型化和定义,当我做'b ClientClass.h:804'时,GDB告诉我'No line 804' 。 任何想法? – 2013-11-06 21:14:23

6

还是一样myClass::operator()(string)是有规律的。!方法

如果你有几个重载的operator()方法(例如const和非const版本),gdb应该提供ch音色在哪里设置断点:

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; 
} 

g++ test.cpp -o test编译,运行gdb test(版本GNU GDB 6.3.50-20050815(苹果GDB-版1344)),输入start,然后才可以设置断点。

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

b myClass::operator()

都工作。

+0

不幸的是,来自最初的答案(b myClass :: operator())的建议不起作用 - 请参阅更新的Q错误:( – DVK 2009-12-23 16:15:10

+0

您是否尝试过'b myClass :: operator()(string)'? – Sebastian 2009-12-23 17:27:47

0
b myClass::operator() 
+0

不幸的是,从最初的答案(B myClass ::运营商())不起作用 - 看到更新Q错误:( – DVK 2009-12-23 16:16:13

+0

适用于我。我在测试之前,我发布了这个答案。 – 2009-12-23 16:19:53

+0

它可能是GDB版本? – DVK 2009-12-23 16:23:34

1

某些C++函数名称可能很难正确输出。更糟糕的是,gdb的自动完成通常会与C++名称混淆。我使用这个技巧

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

请注意函数开头处的单引号。这有助于gdb的autocompleter。