Dan*_*idy 29
这意味着该变量的类型未完全指定.例如:
struct hatstand;
struct hatstand *foo;
Run Code Online (Sandbox Code Playgroud)
GDB知道这foo
是一个指向hatstand
结构的指针,但该结构的成员尚未定义.因此,"不完整类型".
要打印该值,可以将其强制转换为兼容类型.
例如,如果您知道它foo
实际上是指向lampshade
结构的指针:
print (struct lampshade *)foo
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其打印为通用指针,或将其视为整数:
print (void *)foo
print (int)foo
Run Code Online (Sandbox Code Playgroud)
另请参阅GDB手册中的这些页面:
小智 6
我发现如果你反汇编一个使用不完整结构类型的函数,gdb'发现'结构成员,然后可以显示它们.例如,假设您有一个字符串结构:
struct my_string {
char * _string,
int _size
} ;
Run Code Online (Sandbox Code Playgroud)
一些通过指针创建和获取字符串的函数:
my_string * create_string(const char *) {...}
const char * get_string(my_string *){...}
Run Code Online (Sandbox Code Playgroud)
以及创建字符串的测试:
int main(int argc, char *argv[]) {
my_string *str = create_string("Hello World!") ;
printf("String value: %s\n", get_string(str)) ;
...
}
Run Code Online (Sandbox Code Playgroud)
在gdb中运行它并尝试'print*str',你会得到一个'不完整类型'的响应.但是,尝试'反汇编get_string'然后'print*str',它将正确显示结构和值.我不知道为什么会这样,但确实如此.