web-dev-qa-db-fra.com

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

Les commandes list impriment un ensemble de lignes, mais il me faut une seule ligne, où je suis et où une erreur s'est probablement produite.

81
Boris Burkov

Je reçois les mêmes informations lors du débogage. Bien que pas pendant que je vérifie le stacktrace. Très probablement, vous auriez utilisé le drapeau d'optimisation, je pense. Vérifiez ceci lien - quelque chose de connexe.

Essayez de compiler avec -g3 supprime tout indicateur d'optimisation. Alors ça pourrait marcher. HTH!

16
kumar_m_kiran

La commande "frame" vous donnera ce que vous cherchez. (Ceci peut être abrégé juste '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, 'frame' vous indique simplement où vous en êtes (avec un argument, il change le cadre). Plus d'informations sur la commande frame peuvent être trouvées ici .

88
user3162307

Gardez à l'esprit que gdb est une commande puissante, capable d'instructions de bas niveau, liée aux concepts d'assemblage.

Ce que vous recherchez s’appelle le pointeur de instruction, c’est-à-dire:

Le registre du pointeur d’instruction pointe sur l’adresse mémoire que le processeur tentera ensuite d’exécuter. Le pointeur d’instruction est appelé ip en mode 16 bits, eip dans Mode 32 bits et rip en mode 64 bits.

plus de détail ici

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

(gdb) info registers

avec lui, vous pouvez trouver quel mode votre programme est en cours d'exécution (en cherchant lequel de ces registres existe)

then (ici, en utilisant le registre le plus courant ) rip de nos jours, remplacez-le par eip ou très rarement ip si nécessaire):

(gdb)info line *$rip

va vous montrer le numéro de ligne et la source du fichier

(gdb) list *$rip

va vous montrer cette ligne avec quelques avant et après

mais probablement

(gdb) frame

devrait suffire dans de nombreux cas.

16
albfan

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

14
pravu pp

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

1
Mazhar MIK