Jai tapé help
pendant que jétais dans le GDB mais je nai rien trouvé à propos de step-into, step -over et step-out. Jai mis un point darrêt dans un programme dassemblage dans _start
(break _start
). Ensuite, jai tapé next
et il a terminé le débogage. Je suppose que cétait parce quil avait terminé _start
et didn « t entrez dans comme je le voulais.
Quelquun qui peut aider?
Commentaires
- Lisez lintégralité de la documentation GDB. Si je me souviens bien, ils ont été très utiles à ce sujet, lorsque je lai appris pour la première fois. Malheureusement, je n’ai ' besoin de déboguer aucun programme à ce niveau pendant plusieurs décennies, donc les commandes réelles semblent avoir été permutées dans mon cerveau. Donc, je ne peux ' t vraiment écrire une réponse. Mais, si vous le trouvez dans les manuels, vous pouvez répondre à votre propre question pour un bonus.
- @MAP I ' Je vais réessayer. Jai essayé dutiliser un meilleur débogueur (KDbg) mais Je ne ' pas réussi à lutiliser dans Ubuntu .
- gdb est un bon débogueur. Vous voudrez peut-être utiliser Emacs comme interface.
- gdb est un terrible débogueur. Il existe une myriade dextensions pour gérer à quel point ça craint. Syntaxe épouvantable, commandes non consentantes, pagination horrible et maladroite, formatage archaïque, ' t ont un hexdump. Donc non, ce ' nest pas un bon débogueur. Si vous pensez que cest le cas, vous navez ' pas utilisé un bon débogueur.
Réponse
help running
fournit quelques indices:
Il y a step
et next
instuctions (ainsi que nexti
et stepi
).
(gdb) help next Step program, proceeding through subroutine calls. Usage: next [N] Unlike "step", if the current source line calls a subroutine, this command does not enter the subroutine, but instead steps over the call, in effect treating it as a single source line.
Nous pouvons donc voir que step
passe dans sous-routines, mais next
va pas sur sous-programmes.
Les step
et stepi
(et les next
et nexti
) se distinguent par des incréments de « ligne » ou « dinstruction ».
step -- Step program until it reaches a different source line stepi -- Step one instruction exactly
Associé est finish
:
(gdb) help finish Execute until selected stack frame returns. Usage: finish Upon return, the value returned is printed and put in the value history.
Vous trouverez beaucoup plus dinformations utiles à https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html
Commentaires
- De quoi sagit-il signifie par jusquà ce quil atteigne une ligne source différente ?
-
for(i=0;i<10;i++) { printf("%d\n",i); }
est une ligne source mais plusieurs instructions. - Y a-t-il un moyen de sortir? Je nai pas pu ' le trouver dans laide en cours dexécution.
- Quentendez-vous par " step-out "? La commande
finish
terminera le cadre de pile actuel, qui normalement terminera le sous-programme actuel et retournera à lappelant. -
finish
oufin
dans GDB, est lestep-out
dansIDEA
ouEclipse
.
Réponse
Je suis venu ici parce que javais la même question . Jai finalement compris que pour mon objectif, à tout moment, je pouvais utiliser quelque chose comme « step-out » dune boucle, je peux simplement définir un autre point darrêt après la boucle, puis laisser le programme continue
terminer la boucle et exécutez ensuite le point darrêt. Désolé si cela est évident pour la plupart des gens, mais cela est probablement utile pour quelquun qui cherche une réponse à cette question.
Réponse
Utilisez la commande « terminer »; cela fait parfois la même chose que « step-out ». Cela va finir ce que fait la pile (une fonction, généralement), et passer à la ligne suivante après cela. Recherchez la commande pour plus dinformations.