step over(单步跳过)、step in(单步调试)、step out(单步跳出)的区别

2 阅读2分钟

1. 单步跳过(Step Over)

  • 功能:执行当前行的代码,如果这行代码包含一个函数调用,那么调试器不会进入该函数内部,而是将整个函数作为一个单元执行完毕,然后停在下一行代码。
  • 用途:当你对函数的内部实现已经非常了解,或者该函数是库函数、外部API等不需要深入了解的代码时,使用此命令可以快速跳过。

2. 单步调试(Step In)

  • 功能:执行当前行的代码,如果这行代码包含一个函数调用,调试器会进入该函数内部,停在函数的第一行代码上。
  • 用途:用于当你需要理解或调试某个函数的内部实现细节时。这允许你查看函数内部每一步的执行情况。

3. 单步跳出(Step Out)

  • 功能:当你已经在一个函数内部,并想要退出这个函数时使用。调试器会执行当前函数的剩余部分,并在函数返回后的下一行代码停下。
  • 用途:当你已经调试完函数内部的代码或者已经找到了需要的信息,想要快速返回到函数被调用的位置时使用。

示例场景

假设你有以下代码:

void functionA() {
    // 代码部分
    functionB();
    // 更多代码
}

void functionB() {
    // 一些复杂的代码
}

int main() {
    functionA();
    return 0;
}

  • 如果你在 main 函数中的 functionA(); 行使用 Step In,调试器会进入 functionA
  • functionA 中,如果你在 functionB(); 行使用 Step Over,调试器会执行 functionB 但不进入其中。
  • 如果你在 functionB 的任何一行使用 Step Out,调试器会执行完 functionB 的剩余部分并返回到 functionAfunctionB() 调用之后的行。