В чем разница между nexti и stepi в gdb? - PullRequest
0 голосов
/ 26 августа 2018

При отладке исполняемого файла с использованием gdb есть две команды, которые мы можем использовать для пошагового выполнения:

  • stepi и
  • nexti

В чем разница между этими двумя и почему кто-то выбрал одно из них?

, используя помощь в gdb, говорит:

stepi: Шаг один, инструкция точно.

nexti: шаг первый инструкции, но выполните вызовы подпрограммы.

, поскольку здесь мы имеем дело с инструкциями и машинным кодом (самая маленькая часть выполняемой программы), я могу 'не могу понять, что вызывает подпрограмма.

1 Ответ

0 голосов
/ 16 сентября 2018

stepi более детально, чем nexti. если вы вызываете sum() из функции main(), то выполнение stepi достигает вас внутри функции sum (), а nexti - нет.

Ниже приведен скриншот, когда вы вызываете stepi, когда вы набираете команду вызова суммы () (т.е. => 0x08048403 <+40>: call 0x8048419 <sum>). Инстукция stepi направляет вас внутрь sum().

enter image description here

Если вы выполняете nexti, когда выполняете команду вызова суммы () (т. Е. => 0x08048403 <+40>: call 0x8048419 <sum>), тогда он использует возвращаемое значение из метода суммы и переходит к следующей инструкции основного метода. , скриншот, как показано ниже.

enter image description here

Заключение : используйте stepi, если вы хотите видеть все инструкции машины, которые произошли в вашем процессоре. Используйте nexti, если вы хотите видеть только машинные инструкции, выполняемые на main().

...