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
ellerfin
i GDB erstep-out
iIDEA
ellerEclipse
.
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.