Comment déboguer des fonctions standard de la bibliothèque c comme printf?

Je voulais déboguer la fonction printf, donc quand je suis entré dans la fonction printf (débogueur gdb), il m’a montré ceci:

__printf (format=0x80484d0 " my name is Adam") at printf.c:28 28 printf.c: No such file or directory. 

Qu’est-ce que cela veut dire?

Et quand j’ai de nouveau commencé l’étape, il y a beaucoup d’autres déclarations comme celle-ci.

S’il vous plaît aidez-moi à comprendre cela.

Je pense que c’est assez clair. Il y a un endroit où gdb s’attend à ce que le code source soit, alors téléchargez le code source de glibc et mettez-le là. Je pense que le message d’erreur contient le chemin complet.

Si c’est une dissortingbution linux c’est assez simple en fait parce que d’habitude les paquets sources sont aussi expédiés. Sinon, vous devez rechercher le code source vous-même. Notez qu’il DOIT être exactement le même que celui utilisé pour comstackr les composants de la bibliothèque c, pas seulement la même version car les dissortingbuteurs apportent souvent des modifications aux sources.

Eh bien, pour que le débogueur vous montre le code compilé dans les fichiers binarys que vous utilisez, vous avez besoin du code original quelque part.

Vous ne semblez pas avoir cela, donc votre débogueur ne le trouve pas.

Notez que vous ne souhaitez généralement pas déboguer le code source des fonctions de votre bibliothèque std, mais uniquement la façon dont elles sont appelées. Pour cela, les packages “symboles de débogage” habituels de vos systèmes d’exploitation sont optimaux.

Comme d’autres ont répondu, GDB n’a pas pu trouver le fichier source.

Pour les bibliothèques d’exécution C, les dissortingbutions Linux peuvent fournir un RPM debuginfo que vous pouvez installer, ce qui permet à GDB de visualiser les fichiers. Par exemple:

 $ yum search glibc-debuginfo 

 glibc-debuginfo.x86_64 : Debug information for package glibc glibc-debuginfo-common.x86_64 : Debug information for package glibc 

Le paquetage glibc et glibc-debuginfo forment une paire appariée. Il n’y a pas de dépendance explicite, mais le paquet glibc-debuginfo ne fonctionnera que s’il est associé à la même version de glibc .

Si vous avez les sources décompressées quelque part, mais que GDB ne les attend pas, vous pouvez essayer d’utiliser le directory ou la commande set substitute-path pour indiquer à GDB l’emplacement des sources.

La commande de directory demande à GDB d’append un préfixe avant tout chemin de fichier source qu’il tente de trouver. Par exemple, si l’arborescence source est située sous le /tmp , vous pouvez utiliser:

 (gdb) directory /tmp 

La commande set substitute-path permet à GDB de remplacer un préfixe correspondant dans le chemin du fichier source par un préfixe différent. Par exemple, si le fichier source compilé se trouvait dans /build/path/source.c , mais que dans le débogage, il se trouve dans /usr/home/alice/release-1.1/source.c , vous pouvez utiliser:

 (gdb) set substitute-path /build/path /usr/home/alice/release-1.1 

La commande suppose que vous spécifiez uniquement un nom de chemin complet. Par conséquent, elle ne procédera pas à la substitution sur /build/pathological/source.c .