2010-10-18 27 views
26

Tôi đã googling cho điều này và kiểm tra thông qua các hướng dẫn gdb nhưng dường như không thể tìm thấy một câu trả lời cho những gì tôi đang cố gắng để làm.Làm thế nào để liệt kê các phương thức lớp trong gdb?

Có cách nào để gdb in ra một danh sách tất cả các phương thức cho một loại lớp nhất định không? Lệnh in chỉ có vẻ hiển thị các thành viên và trường dữ liệu, không có phương thức nào được hiển thị cho nó.

Ngoài ra, để tiến thêm một bước nữa, có cách nào để in tất cả các phương thức ảo chính xác được cung cấp cho con trỏ cơ sở * không? Nói ví dụ như:

struct A 
{ 
    virtual void foo() {} 
}; 

struct B : public A 
{ 
    void foo() {} 
}; 

int main() 
{ 
    A *b = new B; 
} 

Làm thế nào tôi có thể nhận được gdb để in biến * b và có nó hiển thị các phương pháp ảo chính xác (s)?

Cảm ơn

Trả lời

34

Bạn có thể sử dụng ptype.

Giả sử tôi thêm những dòng này vào ví dụ của bạn:

A alpha; 
B beta; 

Bây giờ trong gdb tôi có thể yêu cầu một mô tả của một kiểu lớp (hoặc một thể hiện của một ô):

(gdb) ptype alpha 
type = class A { 
    public: 
    virtual void foo(); 
} 

(gdb) ptype A 
type = class A { 
    public: 
    virtual void foo(); 
} 

(gdb) ptype beta 
type = class B : public A { 
    public: 
    virtual void foo(); 
} 

(gdb) ptype B 
type = class B : public A { 
    public: 
    virtual void foo(); 
} 

Nếu tôi hãy thử điều đó bằng con trỏ, tôi nhận loại được khai báo:

(gdb) ptype b 
type = class A { 
    public: 
    virtual void foo(); 
} * 

Nếu tôi muốn thực sự pe, tôi phải đặt biến 'đối tượng in':

(gdb) set print object on 
(gdb) ptype b 
type = /* real type = B * */ 
class A { 
    public: 
    virtual void foo(); 
} * 

và sau đó gọi ptype một lần nữa để xem những gì B có (Tôi không biết làm thế nào để làm điều đó chỉ trong một bước).

+0

Cảm ơn bạn, điều đó sẽ làm tốt – greatwolf

Các vấn đề liên quan