Wat is het verschil tussen Nexti en Stepi in GDB?

Terwijl het debuggen van een uitvoerbaar gebruik met GDB , zijn er twee opdrachten die we kunnen gebruiken om door de uitvoering te stappen:

  • stepiEN
  • nexti

Wat is / zijn het verschil / s tussen deze twee en waarom zou iemand er een kiezen in de andere?

Hulp gebruiken in GDB zegt:

Stepi: Stap één instructie precies.

NEXTI: Stap één instructie, maar ga door met subroutine-oproepen.

Aangezien we hier te maken hebben met instructies en machinecode (het kleinste deel van een programma in uitvoering) kan ik niet achterhalen wat de subroutine-oproepen zijn.


Antwoord 1, Autoriteit 100%

stepiis gedetailleerd dan nexti. Als u sum()van main()-functie belt, bereikt u dan stepiBereikt u in de functie SUM (), maar nextiniet.

Hieronder staat de screenshot wanneer u stepinoemt wanneer u op Call of Sum () Instructie (IE, => 0x08048403 <+40>: call 0x8048419 <sum>). De stepiInstuction Routes u in de sum().

Als u nextiDOEN Wanneer u op Call of Sum () Instructie (IE, => 0x08048403 <+40>: call 0x8048419 <sum>) Dan gebruikt het de geretourneerde waarde van sum-methode en gaat naar de volgende instructie van de hoofdmethode, screenshot zoals hieronder.

Conclusie: Gebruik stepials u alle machine-instructies wilt zien die in uw processor zijn gebeurd. Gebruik nextials u alleen de machine-instructies wilt zien die worden uitgevoerd op de main().


Antwoord 2, autoriteit 36%

Het verschil is hoe callwordt behandeld:

  • stepiduikt in call
  • nextivoert calluit maar leidt u niet door de code

Daarom is hier de semantische regel om het beter te onthouden: je moet stapals je door moet lopen

Other episodes