Jeg skrev help, mens jeg var i GDB, men fandt ikke noget om trin ind, trin -over og step-out. Jeg satte et brudpunkt i et forsamlingsprogram i _start (break _start). Bagefter skrev jeg next og det afsluttede fejlfindingen. Jeg antager, at det var fordi det sluttede _start og ikke “t træd ind som jeg ville.

Er der nogen der kan hjælpe?

Kommentarer

  • Læs de fulde GDB-dokumenter. Som jeg husker, var de ret nyttige ved dette, da jeg først lærte det. Desværre har jeg ikke haft ' til at debugge ethvert program på dette niveau i flere årtier, så de faktiske kommandoer ser ud til at være blevet byttet ud i min hjerne. Så jeg kan ' ikke virkelig skrive et svar. Men hvis du finder ud af det i manualerne, kan du besvare dit eget spørgsmål for en bonus.
  • @MAP I ' Jeg prøver igen. Jeg forsøgte at bruge en bedre debugger (KDbg), men Jeg lykkes ikke ' at bruge det i Ubuntu .
  • gdb er en god debugger. Det kan være en god idé at bruge Emacs som frontend.
  • gdb er en frygtelig fejlretning. Der er et utal af udvidelser, der bare skal håndtere, hvor meget det stinker. Forfærdelig syntaks, ikke-konsostente kommandoer, klodset forfærdelig personsøgning, arkaisk formatering, har ikke ' ikke en hexdump. Så nej, det er ' ikke en god fejlretning. Hvis du tror, det er, har du ikke ' ikke brugt en god debugger.

Svar

help running giver nogle tip:

Der er step og next instruktioner (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 træder ind i underrutiner, men next over underrutiner.

step og stepi (og next og nexti) adskiller sig fra trin “line” eller “instruktion”.

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

Relateret 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. 

Meget mere nyttig information findes på https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Kommentarer

  • Hvad betyder det betyder med indtil den når en anden kildelinje ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } er en kildelinje, men flere instruktioner.
  • Er der en måde at komme ud af? Jeg kunne ikke ' ikke finde det i hjælp til at køre.
  • Hvad mener du med " trin ud "? finish -kommandoen fuldfører den aktuelle stabelramme, som normalt fuldender den aktuelle underrutine og vender tilbage til den, der ringer op.
  • finish eller fin i GDB er step-out i IDEA eller Eclipse.

Svar

Jeg kom her, fordi jeg havde det samme spørgsmål . Til sidst regnede jeg med, at til mit formål når som helst jeg kunne bruge noget som “step-out” af en loop, kan jeg bare indstille et andet breakpoint efter loop og derefter lade programmet continue til at afslutte løkken og løb ind i brudpunktet bagefter. Undskyld, hvis det er indlysende for de fleste, men det er sandsynligvis nyttigt for nogen, der søger svar på dette spørgsmål.

Svar

Brug kommandoen “finish”; dette gør undertiden det samme som “step-out”. Det afsluttes, hvad stakken laver (en funktion, normalt), og gå til næste linje efter det. Slå kommandoen op for mere info.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *