Ответ 1
Вы можете использовать ptype
.
Предположим, что эти строки добавляются в ваш пример:
A alpha;
B beta;
Теперь в gdb я могу попросить описание типа класса (или экземпляр одного):
(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();
}
Если я попробую это с помощью указателя, я получаю объявленный тип:
(gdb) ptype b
type = class A {
public:
virtual void foo();
} *
Если мне нужен реальный тип, я должен установить переменную `print object ':
(gdb) set print object on
(gdb) ptype b
type = /* real type = B * */
class A {
public:
virtual void foo();
} *
а затем снова вызовите ptype
, чтобы узнать, что имеет B
(я не знаю, как это сделать за один шаг).