假设以下类别:
class a {
public:
int getA(int a){
return 5;
}
int getA(int a, int b){
return 6;
}
};
int main(){
a cA;
std::cout << cA.getA(5) << std::endl;
return 0;
}
在gdb中,我可以使用以下命令在breakpoint
函数上设置getA
:
b a::getA
但这只会在第一个功能上设置b
,如何在第二个功能上设置b
(当然不使用行号)
答案 0 :(得分:3)
再向您的main()
添加一行:
std::cout << cA.getA(2,3) << std::endl;
现在,重复您的原始实验。现在,您的结果将有所不同:
(gdb) b a::getA
Breakpoint 1 at 0x40089d: a::getA. (2 locations)
“ 2个位置”是gdb告诉您,现在它为两个重载函数注入了断点。逐步执行代码将对此进行验证。
如果符号解析为乘法重载函数,则b
命令会在每个符号处设置一个断点。
但是因为第二个重载函数是一个内联函数,并且从未在原始代码中调用过,所以gcc甚至没有对其进行编译,并且gdb
无需在其上设置断点。
答案 1 :(得分:0)
b a::getA(int,int)
应该可以解决问题。甚至已经在工作的那个也应该可以用b a::getA(int)
替换。
here自己尝试。