2012-03-05 17 views
15

基本的にはtypeid(*this).name()、つまり実際のタイプはthisです。gdb:一部のデータのtypeinfoを表示

GDBでこれを取得したい(ソースコードを変更しないで)。私はprint typeid(*this)を試しましたが、typeidは不明です(ソースファイルには含まれていないため)。

+0

GDBが 'typeid'をサポートしていません。 – trojanfoe

+0

lldbで同じ問題が発生しました... –

+0

[オブジェクトがGDBの特定のC++クラスのインスタンスであるかどうかを判断する方法](http://stackoverflow.com/questions/8528979/how-to-determine-whether -white-is-certain-c-class-in-gdb) –

答えて

9

この質問は関連していてもよい:vtable in polymorphic class of C++ using gdb

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

それは正確に(TYPEIDていない)が、多型ポインタ(基底クラスで、例えばthis)を検査する場合には、実際のオブジェクトの種類を示すべきです。当然、vtableを持つクラス(つまり、少なくとも1つの仮想メソッド)に対してのみ動作しますが、typeidもそうです。

3

'ptype [ARG]'コマンドでタイプが印刷されます。このような

+2

少なくともgdb v7.6.1では、多態性型ではなく静的型だけが出力されるため、この質問には役に立ちません。たとえば、 "d"が基底クラス "B"から派生した "D"型のオブジェクトである場合、 'B * b =&d; type = class B {' –

+1

[type =/* real type = D * * /'で接頭辞をつけられますが、 "whatis"も同様です] –

20

使用ptypeコマンド:

(gdb) ptype 42 
type = int 
関連する問題