[英]What's the difference between nexti and stepi in gdb?
在使用gdb调试可执行文件时,我们可以使用两个命令来逐步执行:
stepi
和nexti
这两者之间有什么区别,为什么有人会选择一个而不是另一个?
在 gdb 中使用帮助 说:
stepi:准确的第一步指令。
nexti:第一步指令,但继续执行子程序调用。
因为我们在这里处理指令和机器代码(正在执行的程序的最小部分),所以我无法弄清楚子程序调用是什么。
stepi
比nexti
更详细。 如果你从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.