2012-03-05 27 views
15

Temel olarak typeid(*this).name(), yani gerçek this türünü almak istiyorum.gdb: Bazı verilerinin tipini gösterir

Bunu GDB'de (kaynak kodu değiştirmeden) almak istiyorum. print typeid(*this)'u denedim ancak typeid'un bilinmediğini (kaynak dosyaya oraya dahil etmediğim için) söylüyorum.

+0

gdb 'typeid' desteklemez. – trojanfoe

+0

günümüzde lldb ... –

+0

ile aynı sorun Olası bir kopyası [Bir nesnenin GDB'de belirli bir C++ sınıfının örneği olup olmadığı nasıl belirlenir] (http://stackoverflow.com/questions/8528979/how-to-determine-whether -an-object-bir-of-bir-c-class-in-gdb) –

cevap

9

bu soru ile ilgili olabilir: vtable in polymorphic class of C++ using gdb: Tam typeid değil(), ancak bir polimorfik işaretçi (temel sınıf, örneğin this) kontrol ederken, gerçek bir nesne türü göstermelidir

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

. Doğal olarak yalnızca vtable (yani en az bir sanal yöntem) olan ancak typeid olan sınıflar için çalışır.

3

'ptype [ARG]' komutu türünü yazdırır. Böyle

+2

En azından, gdb v7.6.1'de bu soruya yardımcı olmuyor, çünkü yalnızca polimorfik tip değil, statik tipini yazdırıyor. Örneğin, "d", "B" taban sınıfından türetilen "D" tipinin bir nesnesi olduğunda, o zaman "B * b = & d; (gdb) ptype b type B sınıfı {' –

+1

[ile yazdırma nesnesi ayarlandı” type =/* real type = D * */'ile önek alır, ancak sonra" whatis "yapar –

20

Kullanım ptype komutunu:

(gdb) ptype 42 
type = int