2012-03-05 22 views
15

Zasadniczo chcę uzyskać typeid(*this).name(), tj. Prawdziwy typ this.gdb: pokaż dane o niektórych danych

Chcę to uzyskać w GDB (bez modyfikowania kodu źródłowego). Próbowałem print typeid(*this), ale mówi, że typeid jest nieznany (ponieważ nie zawarłem go tam w pliku źródłowym).

+0

gdb nie obsługuje 'typeid'. – trojanfoe

+0

ten sam problem obecnie z lldb ... –

+0

Możliwy duplikat [Jak ustalić, czy obiekt jest instancją określonej klasy C++ w GDB] (http://stackoverflow.com/questions/8528979/how-to-determine-whether -an-object-is-an-instance-of-sure-c-class-in-gdb) –

Odpowiedz

9

To pytanie może być związane z: vtable in polymorphic class of C++ using gdb:

(gdb) help set print object 
Set printing of object's derived type based on vtable info. 

To nie jest dokładnie typeid(), ale należy pokazać typ obiektu rzeczywistego podczas inspekcji polimorficzny wskaźnik (np this w klasie bazowej). Oczywiście działa tylko dla klas z vtable (to jest co najmniej jedną metodą wirtualną), ale tak samo jest z typeid.

3

Komenda 'ptype [ARG]' wydrukuje typ.

+2

Przynajmniej w wersji gdb v7.6.1, która nie pomaga w zadaniu tego pytania, ponieważ wypisuje tylko typ statyczny, a nie typ polimorficzny. Na przykład, gdy "d" jest obiektem typu "D" wywodzącym się z klasy bazowej "B", wówczas 'B * b = & d; (gdb) ptype b typ = klasa B {' –

+1

[z" ustaw drukowany obiekt na "otrzyma prefiks z' type =/* real type = D * */'ale tak samo robi" whatis "] –

20

ptype Użyj polecenia, na przykład:

(gdb) ptype 42 
type = int