基本上,我想获得typeid(*this).name()
,即this
的真实类型。
我想在GDB中获取它(不修改源代码)。我尝试了print typeid(*this)
,但它说typeid
未知(因为我没有在源文件中包含它)。
答案 0 :(得分:34)
使用 <p>
Panel: <strong data-bind=" text: PanelDetails[0].Panel">
</strong>
</p>
命令,如下所示:
ptype
答案 1 :(得分:10)
这个问题可能有关: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的类(即至少一种虚方法),typeid
也是如此。
答案 2 :(得分:9)
'ptype [ARG]'命令将打印类型。
答案 3 :(得分:0)
作为@Star Brilliant says here,这是
SubnetMask
返回类似ptype my_var
的东西,但是我希望它返回type = unsigned short
,所以我可以真正知道检查内存时有多少字节。我能弄清楚的最好方法是:
type = uint16_t
,它打印print &my_var
,从而表明其指针类型为(uint16_t *) 0x7ffffffefc2c
,表示其类型为uint16_t*
。
我发现它比uint16_t
更有用,但是如果您有任何建议,则需要一种更直接的方法来获得这种效果。
示例gdb命令并输出:
ptype my_var
同样,注意(gdb) ptype my_var
type = unsigned short
(gdb) print &my_var
$27 = (uint16_t *) 0x7ffffffefc2c
揭示了它是ptype my_var
,而unsigned short
揭示了更详细和更理想的答案,即它是print &my_var
。