gdb:显示某些数据的typeinfo

时间:2012-03-05 14:21:48

标签: c++ gdb typeid typeinfo

基本上,我想获得typeid(*this).name(),即this的真实类型。

我想在GDB中获取它(不修改源代码)。我尝试了print typeid(*this),但它说typeid未知(因为我没有在源文件中包含它)。

4 个答案:

答案 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