Jeg skrev help
mens jeg var i GDB, men fant ikke noe om trinn-inn, trinn -over og step-out. Jeg satte et bruddpunkt i et forsamlingsprogram i _start
(break _start
). Etterpå skrev jeg next
og den avsluttet feilsøkingen. Jeg antar at det var fordi den avsluttet _start
og ikke «t step-into som jeg ønsket.
Noen som kan hjelpe?
Kommentarer
- Les hele GDB-dokumentene. Som jeg husker var de ganske hjelpsomme med dette da jeg først lærte det. Dessverre har jeg ikke ' som trengte å feilsøke ethvert program på det nivået i flere tiår, så de faktiske kommandoene ser ut til å ha blitt byttet ut i hjernen min. Så jeg kan ' ikke virkelig skrive et svar. Men hvis du finner ut av manualene, kan du svare på ditt eget spørsmål for en bonus.
- @KART I ' Prøv igjen. Jeg prøvde å bruke en bedre feilsøkingsprogram (KDbg), men Jeg lykkes ikke ' til å bruke den i Ubuntu .
- gdb er en god feilsøking. Det kan være lurt å bruke Emacs som frontend.
- gdb er en forferdelig feilsøking. Det er et utall utvidelser for å håndtere hvor mye det suger. Forferdelig syntaks, ikke-konsostente kommandoer, klumpete forferdelig personsøk, arkaisk formatering, har ikke ' ikke en hexdump. Så nei, det ' er ikke en god feilsøking. Hvis du tror det er, har du ikke ' ikke brukt en god feilsøking.
Svar
help running
gir noen tips:
Det er step
og next
instruksjoner (og også nexti
og 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.
Så vi kan se at step
trinn inn i underrutiner, men next
over underrutiner.
step
og stepi
(og next
og nexti
) skiller seg ut med trinn «line» eller «instruction».
step -- Step program until it reaches a different source line stepi -- Step one instruction exactly
Relatert er 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.
Mye mer nyttig informasjon er på https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html
Kommentarer
- Hva gjør det mener med til den når en annen kildelinje ?
-
for(i=0;i<10;i++) { printf("%d\n",i); }
er en kildelinje, men flere instruksjoner. - Er det en måte å gå ut av? Jeg kunne ikke ' ikke finne det som hjelp til å løpe.
- Hva mener du med " step-out "?
finish
-kommandoen vil fullføre den nåværende stabelrammen, som normalt vil fullføre den nåværende underrutinen og gå tilbake til den som ringer. -
finish
ellerfin
i GDB, erstep-out
iIDEA
ellerEclipse
.
Svar
Jeg kom hit fordi jeg hadde det samme spørsmålet . Jeg skjønte til slutt at for mitt formål når som helst jeg kunne bruke noe sånt som «step-out» av en sløyfe, kan jeg bare sette et annet brytpunkt etter sløyfen og deretter la programmet continue
løkken og løp inn i brytepunktet etterpå. Beklager hvis det er åpenbart for folk flest, men det er sannsynligvis nyttig for noen som leter etter svar på dette spørsmålet.
Svar
Bruk kommandoen «finish»; dette gjør noen ganger det samme som «step-out». Den avslutter det som stabelen gjør (en funksjon, vanligvis), og går til neste linje etter det. Slå opp kommandoen for mer info.