2016-08-30 37 views
1

我正在使用gdb在Linux中進行調試。但是,當我設置的斷點這樣b d::~d,控制檯將返回:當由GDB設置斷點時,函數「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 ::成功天。 後,我輸入 'I B',控制檯將返回:在../xh:65

的行號是正確的,d ::得到()

斷點保持ÿ0x0000000000577a6c,但函數名稱是錯誤的。

+1

你有沒有試過讓析構函數變成虛擬的?這可能不是原因,但它仍然是一個非虛擬析構函數的潛在錯誤。 – Hayt

+0

謝謝,但由於某種原因,我現在無法做到這一點。@ Hayt –

+0

不知道你爲什麼不能'bd ::〜d',但你可以嘗試設置一個特定行號的斷點特定文件 – alexeykuzmin0

回答

0

如果你將它改寫成這樣會怎樣?

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

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