Jag skrev help medan jag var i GDB men hittade ingenting om steg in, steg -over och step-out. Jag satte en brytpunkt i ett monteringsprogram i _start (break _start). Efteråt skrev jag next och det avslutade felsökningen. Jag antar att det berodde på att det slutade _start och inte ”t steg in som jag ville.

Någon som kan hjälpa till?

Kommentarer

  • Läs hela GDB-dokumentet. Som jag minns var de ganska hjälpsamma med detta när jag först lärde mig det. Tyvärr har jag inte ' t behövt felsöka något program på den nivån i flera decennier, så de verkliga kommandona verkar ha blivit utbytta i min hjärna. Så jag kan ' inte skriva ett svar. Men om du tar reda på det från manualerna kan du svara på din egen fråga för en bonus.
  • @MAP I ' Försök igen. Jag försökte använda en bättre felsökare (KDbg) men Jag lyckas inte ' att använda den i Ubuntu .
  • gdb är en bra felsökare. Du kanske vill använda Emacs som frontend.
  • gdb är en hemsk debugger. Det finns en myriad av tillägg för att hantera hur mycket det suger. Fruktansvärd syntax, kommandon utan konsistens, klumpig hemsk personsökning, arkaisk formatering, ' t har en hexdump. Så nej, det är ' inte en bra felsökare. Om du tror att det är så har du inte ' inte använt en bra felsökare.

Svar

help running ger några tips:

Det finns step och next instruktioner (och även nexti och 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 att step steg i underrutiner, men next över underrutiner.

step och stepi (och next och nexti) skiljer sig från steg ”line” eller ”instruction”.

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

Relaterat är 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. 

Mycket mer användbar information finns på https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Kommentarer

  • Vad gör det menar med tills den når en annan källrad ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } är en källrad men flera instruktioner.
  • Finns det ett sätt att gå ut? Jag kunde inte ' inte hitta det som hjälp att köra.
  • Vad menar du med " steg ut "? finish -kommandot kommer att slutföra den aktuella stackramen, som normalt kommer att slutföra den aktuella underrutinen och återgå till den som ringer.
  • finish eller fin i GDB är step-out i IDEA eller Eclipse.

Svar

Jag kom hit för att jag hade samma fråga . Jag tänkte så småningom att för mitt ändamål när som helst jag kunde använda något som ”step-out” av en loop kan jag bara ställa in en annan brytpunkt efter loop och sedan låta programmet continue avslutas slingan och kör in i brytpunkten efteråt. Ledsen om det är uppenbart för de flesta men det är förmodligen till hjälp för någon som letar efter svar på den här frågan.

Svar

Använd kommandot ”finish”; detta gör ibland samma sak som ”steg ut”. Det avslutar vad stacken gör (en funktion vanligtvis) och går till nästa rad efter det. Leta upp kommandot för mer information.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *