在gdb中,有next, nexti, step, stepi等指令來單步調試程序,他們功能各不相同,區別在於單步的“跨度”上。
next 單步到程序源代碼的下一行,不進入函數。
nexti 單步一條機器指令,不進入函數。
step 單步到下一個不同的源代碼行(包括進入函數)。
stepi 單步一條機器指令。
可以兩兩分類來記住:
-
next和nexti(即n和ni)是下一條,不進入函數內部,比如說在某一行發生了函數調用,next/nexti就繼續到下一行。next是在源碼層面的下一行,而nexti就是機器指令層面的,單步到下一個機器指令。
-
step和stepi(即s和si)就是單步步入,進入函數內部,比如說在某一行發生了函數調用,step/stepi就會進入函數體內部,把函數體執行一遍,再返回執行下一條指令。同理,step是在源碼層面的操作指令,stepi是在機器指令層面的。