49 votes

Comment imprimer <incomplete type> variable en gdb

Parfois, gdb affiche "type incomplet" pour certains types de variables. Qu'est-ce que cela signifie et comment pouvons-nous voir cette valeur?

34voto

Daniel Cassidy Points 7143

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:

8voto

Peter Points 33

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X