Parfois, gdb affiche "type incomplet" pour certains types de variables. Qu'est-ce que cela signifie et comment pouvons-nous voir cette valeur?
Réponses
Trop de publicités?Cela signifie que le type de cette variable a été incomplètement spécifié. Par exemple:
struct hatstand;
struct hatstand *foo;
GDB sait que foo est un pointeur vers une hatstand la structure, mais les membres de cette structure n'ont pas été définis. Par conséquent, "type incomplète".
Pour imprimer la valeur, vous pouvez le convertir en un type compatible.
Par exemple, si vous savez que foo est vraiment un pointeur vers un abat-jour de la structure:
print (struct lampshade *)foo
Ou, vous pouvez l'imprimer comme un pointeur générique, ou de le traiter comme si c'était un nombre entier:
print (void *)foo
print (int)foo
Voir aussi ces pages à partir de la GDB manuel:
Ce que j'ai trouvé est que si vous démontez une fonction qui utilise la nature incomplète de type struct gdb 'découvre les" la les membres de la structure et peut par la suite de les afficher. Par exemple, disons que vous avez une chaîne struct:
struct my_string {
char * _string,
int _size
} ;
certaines fonctions pour créer et obtenir la chaîne de caractères via pointeur:
my_string * create_string(const char *) {...}
const char * get_string(my_string *){...}
et un test qui crée une chaîne de caractères:
int main(int argc, char *argv[]) {
my_string *str = create_string("Hello World!") ;
printf("String value: %s\n", get_string(str)) ;
...
}
Exécuter dans gdb et essayer de "impression *str" et vous obtiendrez un "incomplètes" type de réponse. Cependant, essayez "démonter get_string" puis "imprimer *str', et il va afficher la structure et les valeurs correctement. Je n'ai aucune idée de pourquoi cela fonctionne, mais il le fait.