Hexagon GDB Debugger介绍(45)
4.5.2.5 Python 中的类型
调试器使用类 gdb.Type 表示来自下级的类型。
gdb 模块中提供了以下类型相关的函数:
lookup_type name [block]
按名称查找类型。 name 是要查找的类型的名称。 它必须是一个字符串。
通常,此函数返回 gdb.Type 的一个实例。 如果找不到指定的类型,则会引发异常。
Type 的实例具有以下属性(都是 Type 的实例变量):
code
此类型的类型代码。 类型代码将是下面定义的 TYPE_CODE_ 常量之一。
sizeof
此类型的大小,以目标char为单位。 char 类型是一个 8 位字节。
tag
此类型的标记名称。 标签名是C和C++中struct、union或enum后面的名字; 并非所有语言都有这个概念。 如果此类型没有标签名称,则返回 None 。
Type 的实例具有以下方法:
fields
对于 struct 和 union 类型,此方法返回字段。 范围类型有两个字段:最小值和最大值。 枚举类型每个枚举常量有一个字段。 函数和方法类型的每个参数都有一个字段。 C++ 类的基本类型也表示为字段。 如果类型没有字段,或不属于这些类别之一,则返回空序列。
每个字段都是一个具有以下预定义属性的对象:
bitpos
此属性不适用于static字段(如在 C++ 中)。 对于non-static字段,该值是字段的位位置。
name
字段的名称,或者匿名字段的 None。
artificial
如果该字段是artificial的,则为 True,通常意味着它是由编译器而不是用户提供的。 此属性始终提供,如果字段不是artificial的,则为 False。
bitsize
如果该字段被打包,或者是一个位字段,那么这将有一个非零值,它是字段的大小(以位为单位)。 否则,这将为零; 在这种情况下,字段的大小由其类型给出。
type
字段的类型。 这通常是 Type 的一个实例,但在某些情况下它可以是 None。
const
返回一个新的 gdb.Type 对象,它表示该类型的常量限定变体。
volatile
返回一个新的 gdb.Type 对象,它表示这种类型的 volatile 限定的变体。
unqualified
返回一个新的 gdb.Type 对象,该对象表示此类型的非限定变体。 也就是说,结果既不是 const 也不是 volatile。
reference
返回一个新的 gdb.Type 对象,它表示对此类型的引用。
strip_typedefs
删除所有类型定义层后,返回一个新的 gdb.Type 对象,该对象表示真实类型。
target
返回一个新的 gdb.Type 对象,表示该类型的目标类型。
对于指针类型,目标类型是指向对象的类型。 对于数组类型,目标类型是数组元素的类型。 对于函数或方法类型,目标类型是返回值的类型。 对于复杂类型,目标类型是元素的类型。 对于 typedef,目标类型是别名类型。
如果该类型没有目标,则此方法将引发异常。
template_argument n
如果这个 gdb.Type 是一个模板的实例,这将返回一个新的 gdb.Type,它代表第 n 个模板参数的类型。
如果此 gdb.Type 不是模板类型,则会引发异常。
通常,只有 C++ 代码具有模板类型。
每种类型都有一个代码,表示该类型属于哪个类别。 可用的类型类别由 gdb 模块中定义的常量表示:
type | 含义 |
---|---|
TYPE_CODE_PTR | 类型是一个指针 |
TYPE_CODE_ARRAY | 类型是一个数组 |
TYPE_CODE_STRUCT | 结构体 |
TYPE_CODE_UNION | 类型是联合体 |
TYPE_CODE_ENUM | 类型是枚举 |
TYPE_CODE_FLAGS | 位标志类型,用于状态寄存器等 |
TYPE_CODE_FUNC | 类型是一个函数 |
TYPE_CODE_INT | 类型是整数类型 |
TYPE_CODE_FLT | 浮点类型 |
TYPE_CODE_VOID | 特殊类型void |
TYPE_CODE_SET | 帕斯卡(Pascal )集类型 |
TYPE_CODE_RANGE | 范围类型,即有边界的整数类型 |
TYPE_CODE_STRING | 字符串类型,不适用于 C |
TYPE_CODE_BITSTRING | 位串 |
TYPE_CODE_ERROR | 未知或错误的类型 |
TYPE_CODE_METHOD | 在 C++ 中找到的方法类型 |
TYPE_CODE_METHODPTR | 指向成员函数的指针 |
TYPE_CODE_MEMBERPTR | 指向成员的指针 |
TYPE_CODE_REF | 引用类型 |
TYPE_CODE_CHAR | 字符类型 |
TYPE_CODE_BOOL | 布尔类型 |
TYPE_CODE_COMPLEX | 复杂的浮点类型 |
TYPE_CODE_TYPEDEF | 其他类型的 typedef |
TYPE_CODE_NAMESPACE | C++ 命名空间 |
TYPE_CODE_DECFLOAT | 十进制浮点类型 |
TYPE_CODE_INTERNAL_FUNCTION | 调试器内部的函数,这是用于表示便利功能的类型 |