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 ou fin dans GDB, est le step-out dans IDEA ou Eclipse.

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *