繁体   English   中英

gdb 中的 nexti 和 stepi 有什么区别?

[英]What's the difference between nexti and stepi in gdb?

在使用gdb调试可执行文件时,我们可以使用两个命令来逐步执行:

  • stepi
  • nexti

这两者之间有什么区别,为什么有人会选择一个而不是另一个?

在 gdb 中使用帮助 说:

stepi:准确的第一步指令。

nexti:第一步指令,但继续执行子程序调用。

因为我们在这里处理指令和机器代码(正在执行的程序的最小部分),所以我无法弄清楚子程序调用是什么。

stepinexti更详细。 如果你从main()函数调用sum()然后在 sum() 函数中执行stepi到达你,但nexti没有。

下面是在调用 sum()指令时调用stepi时的屏幕截图(即=> 0x08048403 <+40>: call 0x8048419 <sum> )。 stepi指令将您路由到sum()

在此处输入图片说明

如果在调用 sum()指令时执行nexti (即=> 0x08048403 <+40>: call 0x8048419 <sum> ),则它使用 sum 方法的返回值并转到 main 方法的下一条指令,截图如下。

在此处输入图片说明

结论:如果您想查看处理器中发生的每条机器指令,请使用stepi 如果您只想查看在main()处执行的机器指令,请使用nexti

区别在于call的处理方式:

  • stepi潜入call
  • nexti运行call但不会nexti您完成其代码

因此,这里的语义规则,以更好地记住它:你是一步,如果你需要穿行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM