我在C ++类中有两个方法如下:
class myClass {
public:
void operator()( string myString ) {
// Some code
}
void myMethod() { ... }
}
对于常规方法,我只需将GDB中的断点设置为:
b myClass::myMethod
但是如何为第一个方法设置断点?
更新:
初始答案的建议(b myClass :: operator())不起作用:(
b myClass::operator()
Function "myClass::operator()" not defined.
谢谢!
答案 0 :(得分:9)
gdb还会在特定的行号处获取断点。例如
b file.cc:45
答案 1 :(得分:6)
同样如此。 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;
}
使用g++ test.cpp -o test
编译,运行gdb test
(版本GNU gdb 6.3.50-20050815(Apple版本gdb-1344)),键入start
,然后才能设置断点。< / p>
b 'myClass::operator()(string)'
和
b myClass::operator()
都工作了。
答案 2 :(得分:1)
某些C ++函数名称很难正确输入。更糟糕的是,gdb的自动完成通常会与c ++名称混淆。我用这个技巧
gdb> break 'myClass::operator()<TAB>
注意函数开头的单引号。这有助于gdb的自动完成。
答案 3 :(得分:0)
b myClass::operator()