2009-12-23 85 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。