【问题标题】:Function "d::~d" not defined when setting breakpoint by GDB由 GDB 设置断点时未定义函数“d::~d”
【发布时间】:2017-01-06 13:16:02
【问题描述】:

我正在使用 gdb 在 Linux 中进行调试。但是当我像b d::~d这样设置断点时,控制台返回:

函数“d::~d”未定义

我无法在析构函数中设置断点。 下面是示例代码:

class b
{
  protected:
   ...
  public:
  b(){
  ...
  }
  ~b() {
  ...
  }
  ...
} ;

class d: public b{ 
  protected:
  ...
  public:
  d(){
  ...
  }
  ~d() {
  ...
  }
  ...
  p* get(){...};
} ;

但是,我成功设置了 b::b、b::~b 和 d::d 的断点。 在我输入“i b”后,控制台返回:

断点将 y 0x0000000000577a6c 保存在 d::get() at ../x.h:65

行号是对的,但是函数名是错的。

【问题讨论】:

  • 你试过把析构函数变成虚拟的吗?这可能不是原因,但它仍然是具有非虚拟析构函数的潜在错误。
  • 谢谢,但由于某种原因,我现在不能这样做。@Hayt
  • 不知道为什么你不能b d::~d,但你可以尝试在特定文件的特定行号上设置断点
  • 还有:你编译优化了吗?也许这个功能由于某种原因被优化了。
  • 我已经更新了我的问题。@alexeykuzmin0

标签: c++ linux debugging gdb breakpoints


【解决方案1】:

如果你这样重写呢?

class b
{
  protected:
   ...
  public:
  b(){
  ...
  }
  virtual ~b() {
  ...
  }
  ...
} ;

class d: public b{ 
  protected:
  ...
  public:
  d(){
  ...
  }
  ~d() {
  ...
  }
  ...
  p* get(){...};
} ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多