137 votes

gdb : comment imprimer la ligne courante ou trouver le numéro de la ligne courante ?

list imprime un ensemble de lignes, mais j'ai besoin d'une seule ligne, où je suis et où une erreur s'est probablement produite.

142voto

user3162307 Points 146

La commande 'frame' vous donnera ce que vous cherchez. (Elle peut être abrégée en 'f'). Voici un exemple :

(gdb) frame
\#0  zmq::xsub_t::xrecv (this=0x617180, msg_=0x7ffff00008e0) at xsub.cpp:139
139         int rc = fq.recv (msg_);
(gdb)

Sans argument, "cadre" vous indique simplement où vous en êtes (avec un argument, il change le cadre). Vous trouverez plus d'informations sur la commande frame aquí .

43voto

pravu pp Points 722

Commande o cadre peut être utilisé. où la commande donnera plus d'informations avec le nom de la fonction

31voto

kumar_m_kiran Points 1750

J'obtiens les mêmes informations en déboguant. Mais pas lorsque je vérifie le suivi de pile. Je pense que vous avez probablement utilisé le drapeau d'optimisation. Vérifiez ceci lien - quelque chose de connexe.

Essayez de compiler avec -g3 supprimer tout drapeau d'optimisation. Alors cela pourrait fonctionner. HTH !

22voto

albfan Points 2333

Gardez à l'esprit que gdb est une commande puissante - capable d'exécuter des instructions de bas niveau - et qu'elle est liée aux concepts d'assemblage.

Ce que vous cherchez s'appelle un pointeur d'instruction, c'est à dire

Le registre du pointeur d'instruction pointe vers l'adresse mémoire que le processeur va tenter d'exécuter. Le pointeur d'instruction est appelé ip en mode 16 bits, eip en mode 32 bits, et rip en mode 64 bits.

plus de détails aquí

tous les registres disponibles lors de l'exécution de gdb peuvent être affichés avec :

(gdb) info registers

avec cela vous pouvez trouver quel mode votre programme est en cours d'exécution (en regardant lesquels de ces registres existent)

puis (en utilisant ici le registre le plus courant) rip aujourd'hui, remplacer par eip ou très rarement ip si nécessaire) :

(gdb)info line *$rip

vous montrera le numéro de ligne et le fichier source

(gdb) list *$rip

vous montrera cette ligne avec quelques avant et après

mais probablement

(gdb) frame

devrait suffire dans de nombreux cas.

15voto

Mazhar MIK Points 128

Toutes les réponses ci-dessus sont correctes, ce que je préfère est d'utiliser le mode tui (ctrl+X A ou 'tui enable') qui montre votre emplacement et la fonction dans une fenêtre séparée qui est très utile pour les utilisateurs. J'espère que cela vous aidera aussi.

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