gdb在c ++头文件中设置断点?

时间:2018-06-06 05:08:38

标签: gdb

我有一个future.hh头文件,我在第800行设置了一个断点,如下所示:

   795      ~future() {
   796          if (_promise) {
   797              _promise->_future = nullptr;
   798          }
   799          if (failed()) {
   800              report_failed_future(state()->get_exception());
   801          }

我认为如果在将来的破坏中发生异常,我可以得到堆栈跟踪。但是我得到了这个: enter image description here

这不是我想要的。这是为什么 ?这么多断点。当我做continue时,它会每次停止,而不是我所期望的。

1 个答案:

答案 0 :(得分:1)

当您发出break future.hh:800之类的请求时,gdb会尝试在与该源位置对应的每个可能地址处设置断点。

在您的情况下,最有可能发生的是析构函数已多次内联,因此您最终会遇到很多断点位置。 (这里另一个不太可能的选择是编译器错误导致它以某种方式发出不正确的行表。)

没有优化的编译确实没有帮助 - 它可能会导致更少的断点位置,但是你仍然会看到尽可能多的停靠点,因为所有发生的事情都是在每次调用析构函数时停止。

相反,如果你知道你只想停在某些析构函数中,那么最好的方法是尝试缩小停止发生的点。一些想法:

  • 在您关心的周围代码中放置断点,而不是在此析构函数中

  • 禁用断点上的部分或大部分位置。 (在gdb中,可以单独禁用断点。)

  • 使断点有条件以尝试减少不希望的停止次数