当前位置:  开发笔记 > 前端 > 正文

如何在gdb中打印<incomplete type>变量

如何解决《如何在gdb中打印<incompletetype>变量》经验,为你挑选了2个好方法。

有时gdb会为某些类型的变量打印"不完整类型".这意味着什么,我们怎样才能看到这个价值?



1> Daniel Cassi..:

这意味着该变量的类型未完全指定.例如:

struct hatstand;
struct hatstand *foo;

GDB知道这foo是一个指向hatstand结构的指针,但该结构的成员尚未定义.因此,"不完整类型".

要打印该值,可以将其强制转换为兼容类型.

例如,如果您知道它foo实际上是指向lampshade结构的指针:

print (struct lampshade *)foo

或者,您可以将其打印为通用指针,或将其视为整数:

print (void *)foo
print (int)foo

另请参阅GDB手册中的这些页面:

http://sourceware.org/gdb/current/onlinedocs/gdb/Data.html#Data

http://sourceware.org/gdb/current/onlinedocs/gdb/Symbols.html#Symbols



2> 小智..:

我发现如果你反汇编一个使用不完整结构类型的函数,gdb'发现'结构成员,然后可以显示它们.例如,假设您有一个字符串结构:

struct my_string {
    char * _string,
    int _size
} ;

一些通过指针创建和获取字符串的函数:

my_string * create_string(const char *) {...}
const char * get_string(my_string *){...}

以及创建字符串的测试:

int main(int argc, char *argv[]) {
    my_string *str = create_string("Hello World!") ;
    printf("String value: %s\n", get_string(str)) ;
    ...
}

在gdb中运行它并尝试'print*str',你会得到一个'不完整类型'的响应.但是,尝试'反汇编get_string'然后'print*str',它将正确显示结构和值.我不知道为什么会这样,但确实如此.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有