gdb如何知道指针指向int
或struct
或任何其他数据类型?
答案 0 :(得分:5)
whatis expr
打印表达式expr的数据类型。 expr实际上没有被评估,并且它内部的任何副作用操作(例如赋值或函数调用)都不会发生。见表达式部分。
ptype expr
p型
打印表达式expr类型的描述。 ptype与whatis的不同之处在于打印详细说明,而不仅仅是类型的名称。例如,对于此变量声明:
struct complex {double real; double imag;} v;
这两个命令给出了这个输出:
(gdb) whatis v
type = struct complex
(gdb) ptype v
type = struct complex {
double real;
double imag;
}
答案 1 :(得分:4)
gdb无法知道,除非指针来自可以确定类型的变量或表达式。
如果gdb被赋予0x4567789,它不知道那可能指向什么。但是如果int * p具有该值,gdb可以遵循该值并为您提供该地址包含的内容。
答案 2 :(得分:1)
gdb
通过读取使用调试选项(-g
)编译时嵌入在可执行文件中的调试信息(也就是符号表),知道代码中指针变量的类型。