gdb中nexti和stepi有什么区别?

时间:2018-08-26 08:29:45

标签: c++ c debugging gdb

使用 gdb 调试可执行文件时,有两个命令可用于逐步执行:

  • stepi
  • nexti

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

在gdb中使用帮助说:

  

stepi:精确地执行一条指令。

     

下一个:第一步,但继续进行子例程调用。

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

2 个答案:

答案 0 :(得分:1)

stepinexti更详细。如果您从sum()函数调用main(),那么在stepi函数内部执行nexti,而stepi则不然。

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

enter image description here

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

enter image description here

结论:如果要查看处理器中发生的每条机器指令,请使用nexti。如果您只想在main()上执行机器指令,请使用df.describe().popularity count 10865.000000 mean 0.646446 std 1.000231 min 0.000065 25% 0.207575 50% 0.383831 75% 0.713857 max 32.985763 Name: popularity, dtype: float64

答案 1 :(得分:1)

区别在于SQL> declare 2 rowcount1 NUMBER; 3 begin 4 dbms_output.put_line('<'||rowcount1||'>'); 5 rowcount1 := rowcount1 + 1; 6 dbms_output.put_line('<'||rowcount1||'>'); 7 end; 8 / <> <> PL/SQL procedure successfully completed. 的处理方式:

  • call进入stepi
  • call运行nexti,但不会引导您遍历其代码