Ik heb help getypt terwijl ik in de GDB was, maar ik heb niets gevonden over instappen, stap -over en step-out. Ik heb een breekpunt in een Assembly-programma geplaatst in _start (break _start). Daarna typte ik next en het voltooide de foutopsporing. Ik denk dat het was omdat het _start klaar was en niet “t stap in zoals ik wilde.

Iedereen die kan helpen?

Reacties

  • Lees de volledige GDB-documenten. Zoals ik me herinner, waren ze hier erg behulpzaam toen ik het voor het eerst leerde. Helaas heb ik ' geen programma hoeven te debuggen op dat niveau gedurende tientallen jaren, dus het lijkt alsof de eigenlijke commandos in mijn hoofd zijn uitgewisseld. Dus ik kan ' niet echt een antwoord schrijven. Maar als je het toch uit de handleidingen haalt, dan kun je je eigen vraag beantwoorden voor een bonus.
  • @MAP Ik ' zal het opnieuw proberen. Ik heb geprobeerd een betere debugger (KDbg) te gebruiken, maar Ik slaag er niet ' in om het in Ubuntu te gebruiken.
  • gdb is een goede debugger. Misschien wil je Emacs als frontend gebruiken.
  • gdb is een vreselijke debugger. Er zijn een groot aantal extensies om om te gaan met hoeveel het waard is. Vreselijke syntaxis, niet-consostente commandos, onhandige vreselijke paginering, archaïsche opmaak, heeft ' geen hexdump. Dus nee, het ' is geen goede debugger. Als je denkt dat dit het geval is, heb je ' t geen goede debugger gebruikt.

Antwoord

help running geeft enkele hints:

Er zijn step en next instuctions (en ook nexti en 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. 

We kunnen dus zien dat step naar subroutines stapt, maar next zal stappen over subroutines.

De step en stepi (en de next en nexti) onderscheiden zich door “line” of “instruction” incrementen.

step -- Step program until it reaches a different source line stepi -- Step one instruction exactly 

Gerelateerd is 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. 

Er is veel meer nuttige informatie op https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Reacties

  • Wat doet het bedoel met totdat het een andere bronregel bereikt?
  • for(i=0;i<10;i++) { printf("%d\n",i); } is één bronregel maar meerdere instructies.
  • Is er een manier om uit te stappen? Ik kon ' het niet vinden in Help bij het uitvoeren.
  • Wat bedoel je met " step-out "? Het finish commando voltooit het huidige stack frame, dat normaal gesproken de huidige subroutine voltooit en terugkeert naar de beller.
  • finish of fin in GDB, is de step-out in IDEA of Eclipse.

Antwoord

Ik kwam hier omdat ik dezelfde vraag had . Ik kwam uiteindelijk tot de conclusie dat ik voor mijn doel elke keer dat ik zoiets als “step-out” van een lus kon gebruiken, gewoon een ander breekpunt na de lus kon instellen en het programma continue kon laten eindigen de lus en daarna het breekpunt tegenkomen. Sorry als dat voor de meeste mensen duidelijk is, maar het is waarschijnlijk nuttig voor iemand die op zoek is naar een antwoord op deze vraag.

Antwoord

Gebruik het commando “finish”; dit doet soms hetzelfde als “uitstappen”. Het zal afmaken wat de stapel doet (meestal een functie), en daarna naar de volgende regel gaan. Zoek het commando op voor meer informatie.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *