基本的にはtypeid(*this).name()
、つまり実際のタイプはthis
です。gdb:一部のデータのtypeinfoを表示
GDBでこれを取得したい(ソースコードを変更しないで)。私はprint typeid(*this)
を試しましたが、typeid
は不明です(ソースファイルには含まれていないため)。
基本的にはtypeid(*this).name()
、つまり実際のタイプはthis
です。gdb:一部のデータのtypeinfoを表示
GDBでこれを取得したい(ソースコードを変更しないで)。私はprint typeid(*this)
を試しましたが、typeid
は不明です(ソースファイルには含まれていないため)。
この質問は関連していてもよい: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
もそうです。
'ptype [ARG]'コマンドでタイプが印刷されます。このような
少なくともgdb v7.6.1では、多態性型ではなく静的型だけが出力されるため、この質問には役に立ちません。たとえば、 "d"が基底クラス "B"から派生した "D"型のオブジェクトである場合、 'B * b =&d; type = class B {' –
[type =/* real type = D * * /'で接頭辞をつけられますが、 "whatis"も同様です] –
使用ptype
コマンド:
(gdb) ptype 42
type = int
GDBが 'typeid'をサポートしていません。 – trojanfoe
lldbで同じ問題が発生しました... –
[オブジェクトがGDBの特定のC++クラスのインスタンスであるかどうかを判断する方法](http://stackoverflow.com/questions/8528979/how-to-determine-whether -white-is-certain-c-class-in-gdb) –