Programmation en C: Comment utiliser gdb avec Makefile et les arguments de ligne de commande?
Pour créer le .hors de l'exécutable, j'ai d'entrée:
$: make
$: myprogram.out name.ged
Mon programme intègre un argument de ligne de commande, ainsi que le "nom.ged".
Chaque fois que j'ai lancer gdb après l'obtention d'un segmentation fault (core dumped), je suis entrée:
$: gdb a.out core
(gdb): bt
J'utilise ensuite la trace de la commande, et gdb retourne:
#0 0x4a145155 in ?? ()
#1 0x08a16ce0 in ?? ()
J'ai même essayé d'utiliser la commande t déplacer vers le haut de la pile, mais toujours pas de chance. Je ne peux pas dire la ligne dans mon programme me donne un seg fault. gdb travaille avec mes autres programmes qui ne visent pas un Makefile et les arguments de la commande, alors je me demandais si mes commandes sont incorrectes.
Vous avez besoin de compiler avec la
La commande gcc-g myprogram.le nom.la ged?
Dans le fichier il y a une commande pour compiler le code (gcc ...) Qui commande les besoins de l'-g drapeau pour ajouter des informations supplémentaires pour gdb pour travailler efficacement.
Aussi, si le programme est
-g
drapeau. Comme vous n'avez pas posté le Makefile je ne peux pas vous donner de l'aide.La commande gcc-g myprogram.le nom.la ged?
Dans le fichier il y a une commande pour compiler le code (gcc ...) Qui commande les besoins de l'-g drapeau pour ajouter des informations supplémentaires pour gdb pour travailler efficacement.
Aussi, si le programme est
myprogram.out
, il devrait être gdb myprogram.out core
pas gdb a.out core
. Il pourrait être n'importe quel vieux a.out
assis là.OriginalL'auteur Bonnie | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
Résumant les commentaires (avant tout le monde :).
Votre fichier exécutable est absent de la symbolique de l'information que gdb a besoin d'afficher le code source correspondant. Vous devez ajouter le
-g
option à la commande de la compilation et de produire un nouveau fichier exécutable. Ensuite relancer votre test en échec à produire un nouveau fichier de base. gdb avec ce fichier exécutable et de base sera en mesure de vous montrer la pile des appels de fonction à l'aide debacktrace
.Dans un makefile, de la façon la plus simple de le faire est d'ajouter (à la)
CFLAGS
variable qui est utilisée avec l'implicite .o.c la règle.Vous pouvez également l'ajouter directement à la ligne de commande (en supposant un décent shell :). Cela définit la valeur d'une variable d'environnement lors de l'exécution de la
make
de commande (et des sous-commandes).J'avais en fait vous conseillons de l'ajouter à votre bash .profil, de sorte que vous obtenez toujours la plupart des informations à partir du compilateur.
Puis, quand vous en avez besoin, mettre ceci dans le fichier makefile pour faire un debuggable exécutable:
OriginalL'auteur luser droog