Voir/Imprimer la fonction de code à partir de GDB
Je suis en train d'élaborer un texte simple interface utilisateur qui exécute certaines commandes gdb.
Je veux de l'utilisateur pour être en mesure de définir et de pause/trace point à une certaine zone du code et exécuter des commandes de débogage.
Je veux utilisateur d'entrer la fonction qui doit être débogué. J'ai ensuite prendre le nom de cette fonction et d'imprimer le code source de la fonction, puis de demander à l'utilisateur de sélectionner la ligne de code pour définir la pause/trace point. Pour le moment, à l'aide de la démonter commande je peux imprimer les adresses de mémoire pour l'utilisateur, mais je veux imprimer le code source à la place.
Cela peut-il être fait dans gdb?
Actuellement:
Dump of assembler code for function test_function:
0x03800f70 <test_function+0>: push %ebp
0x03800f71 <test_function+1>: mov %esp,%ebp
0x03800f73 <test_function+3>: sub $0x48,%esp
Ce que je veux:
void main()
{
printf("Hello World\n");
}
Merci!
EDIT:
J'obtiens ceci:
(gdb) list myFunction
941 directory/directory_etc/sourcefile.c: No such file or directory.
in directory/directory_etc/sourcefile.c
ensuite, j'ai essayé en précisant numligne:
(gdb) list directory/directory_etc/sourcefile.c:941
936 in directory/directory_etc/sourcefile.c
De sorte que le comportement est similaire à ce que vous décrivez, mais "liste de nom de fichier:numligne" n'est toujours pas de travail
Merci!
OriginalL'auteur user2342775 | 2013-05-08
Vous devez vous connecter pour publier un commentaire.
Utilisation:
Voir l'aide en ligne de la
list
de commande pour plus de détails:Pour n'importe quel non-jouet de projets, vous aurez probablement frapper un cas comme celui-ci:
Qui énumère les multiples définitions de fonction dans une base de code. Dans le
printf()
cas ci-dessus, le non surchargé pure fonction C a deux définitions. Celle qui est définie dansstdio2.h
. Vous pouvez ensuite utiliser lalist FILE:LINENUM
forme de préciser laquelle vous souhaitez ajouter à la liste:Pour le "sourcefile.c: Aucun fichier ou répertoire de" les erreurs que vous voyez, vous devez dire à GDB où chercher dans le code source. Voir GDB Manuel: Chemin de la Source. Évidemment, vous aurez besoin d'avoir le code source de la fonction que vous souhaitez ajouter à la liste sur votre machine.
J'ai modifié ma réponse pour le cas où le gdb de commande de la liste montre plusieurs définitions pour un nom de fonction. Est-ce que vous voyez?
J'ai édité ma question d'origine pour essayer de le rendre plus lisible, merci!
Est-il, par hasard, une façon de demander
gdb
où la fonction est définie?oui! Essayez "(gdb) de la ligne info-MY_FUNCTION". J'ai écrit quelques notes ici sur l'utilisation de GDB pour les aider à naviguer dans le code du noyau Linux docs.google.com/document/d/... Pour utiliser ces fonctionnalités, vous aurez envie de lire "Chapitre 9 Examen de Fichiers Source" de la GDB manuel.
OriginalL'auteur scottt
Pour gcc:
Ajouter une option de débogage drapeau -g avec la compilation du source:
À l'essai, l'utilisation:
Pour encore plus de fonctionnalité, consultez les pages man:
OriginalL'auteur Metric