Am tastat help în timp ce eram în GDB, dar nu am găsit nimic despre pas, pas -over și step-out. Am pus un punct de întrerupere într-un program de asamblare în _start (break _start). Ulterior am tastat next și a terminat depanarea. Cred că a fost pentru că a terminat _start și nu „t step-into așa cum am dorit.

Oricine poate ajuta?

Comentarii

  • Citiți documentele GDB complete. După cum îmi amintesc, au fost destul de utile în legătură cu acest lucru, când am învățat-o prima dată. Din păcate, nu am ' nevoie de depanarea oricărui program la acel nivel timp de câteva decenii, astfel încât comenzile efective par să fi fost schimbate în creierul meu. Deci, nu pot ' să scriu cu adevărat un răspuns. Dar, dacă vă dați seama din manuale, atunci puteți răspunde la propria întrebare pentru un bonus.
  • @MAP I ' Voi încerca din nou. Am încercat să folosesc un depanator mai bun (KDbg), dar nu reușesc să-l folosesc în Ubuntu . ' / li>
  • gdb este un bun depanator. Poate doriți să utilizați Emacs ca frontend.
  • gdb este un depanator îngrozitor. Există o multitudine de extensii pentru a face față cât de mult e de rahat. Sintaxa îngrozitoare, comenzi neconforme, paginarea groaznică, formatarea arhaică, nu are o descărcare hexagonală. Deci nu, ' nu este un depanator bun. Dacă credeți că este, nu ați ' folosit un depanator bun.

Răspuns

help running oferă câteva sugestii:

Există step și next instrucțiuni (și, de asemenea, nexti și 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. 

Deci putem vedea că step pași în subrutine, dar next peste subrutine.

step și stepi (și și nexti) se disting prin incremente de „linie” sau „instrucțiune”.

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

În legătură este 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. 

Mai multe informații utile sunt la https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Comentarii

  • Ce înseamnă înseamnă prin până când ajunge la o altă linie sursă ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } este o linie sursă, dar instrucțiuni multiple.
  • Există o modalitate de a ieși? Nu am putut ' să-l găsesc în funcționarea ajutorului.
  • Ce vrei să spui prin " step-out "? Comanda finish va completa cadrul curent al stivei, care va completa în mod normal subrutina curentă și va reveni la apelant.
  • finish sau fin în GDB, este step-out în IDEA sau Eclipse.

Răspuns

Am venit aici pentru că aveam aceeași întrebare . În cele din urmă mi-am dat seama că, pentru scopul meu, de fiecare dată când aș putea folosi ceva de genul „step-out” dintr-o buclă, pot seta un alt punct de întrerupere după buclă și apoi să las programul continue să termine bucla și treceți apoi la punctul de întrerupere. Ne pare rău dacă acest lucru este evident pentru majoritatea oamenilor, dar este probabil util pentru cineva care caută un răspuns la această întrebare.

Răspuns

Folosiți comanda „finisare”; uneori, acest lucru face același lucru ca și „ieșirea”. Se va termina ceea ce face stiva (o funcție, de obicei) și va merge la următoarea linie după aceea. Căutați comanda pentru mai multe informații.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *