gdb:在c ++中的类函数上创建断点

时间:2019-03-26 03:38:33

标签: c++ gdb

假设以下类别:

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(当然不使用行号)

2 个答案:

答案 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自己尝试。