在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是在机器指令层面的。