簡體   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