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 eller fin i GDB, er step-out i IDEA eller Eclipse.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *