2012-03-05 9 views
15

Fondamentalmente, voglio ottenere typeid(*this).name(), ovvero il tipo reale di this.gdb: mostra typeinfo di alcuni dati

Voglio ottenere questo in GDB (senza modificare il codice sorgente). Ho provato print typeid(*this) ma dice che typeid è sconosciuto (perché non l'ho incluso lì nel file sorgente).

+0

gdb non supporta 'typeid'. – trojanfoe

+0

stesso problema oggigiorno con lldb ... –

+0

Possibile duplicato di [Come determinare se un oggetto è un'istanza di certa classe C++ in GDB] (http://stackoverflow.com/questions/8528979/how-to-determine-whether -an-oggetto-è-un-istanza-di-certa-c-classe-in-gdb) –

risposta

9

Questa domanda possono essere correlati: vtable in polymorphic class of C++ using gdb:

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

Non è esattamente typeid() ma deve indicare il tipo oggetto reale durante l'ispezione un puntatore polimorfico (ad esempio this in una classe base). Funziona naturalmente solo per le classi con un vtable (vale a dire almeno un metodo virtuale), ma lo è anche per typeid.

3

Il comando "ptype [ARG]" stamperà il tipo.

+2

Almeno in gdb v7.6.1 che non aiuta con questa domanda, in quanto stampa solo il tipo statico, non il tipo polimorfico. Ad esempio, dove "d" è un oggetto di tipo "D" derivato dalla classe base "B", quindi 'B * b = & d; (gdb) ptype b tipo = classe B {' –

+1

[con" imposta oggetto di stampa su "viene visualizzato il prefisso con' type =/* tipo reale = D * */'ma anche così" whatis "] –

20

Usa ptype comando, in questo modo:

(gdb) ptype 42 
type = int