[英]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.