使用 gdb 调试可执行文件时,有两个命令可用于逐步执行:
stepi
和nexti
这两者之间的区别是什么?为什么有人会选择一个而不是另一个?
在gdb中使用帮助说:
stepi:精确地执行一条指令。
下一个:第一步,但继续进行子例程调用。
因为我们在这里处理指令和机器代码(正在执行的程序的最小部分),所以我无法弄清楚子例程的调用是什么。
答案 0 :(得分:1)
stepi
比nexti
更详细。如果您从sum()
函数调用main()
,那么在stepi
函数内部执行nexti
,而stepi
则不然。
以下是您在调用sum()指令(即=> 0x08048403 <+40>: call 0x8048419 <sum>
)时调用stepi
时的屏幕截图。 sum()
的指导将您路由到nexti
内部。
如果您在调用 sum()指令(即=> 0x08048403 <+40>: call 0x8048419 <sum>
)时执行stepi
,则它将使用sum方法返回的值,然后转到主要方法的下一条指令,截图如下。
结论:如果要查看处理器中发生的每条机器指令,请使用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
,但不会引导您遍历其代码