Eclipse Debugging:在return语句后继续?

时间:2011-11-09 03:09:21

标签: java android eclipse

我最近开始使用Eclipse进行Android开发。通过代码调试时,我注意到一个奇怪的行为(至少与Visual Studio相比):在函数中间点击return语句后,它不会立即返回,但总是跳转到最后一个return语句。例如:

String getTest(int i){
  if (i == 0)
     return "0";
  return "-1";
}

给定i = 0,在点击第一个return语句后,它不会跳出这个函数,而是移动到下一个return语句。但是,它确实返回“0”,而不是“-1”。那么,为什么这个虚拟步骤呢?这对我来说很困惑。谁能解释为什么?

2 个答案:

答案 0 :(得分:1)

这只是eclipse调试器中的一个直观的东西,无论return语句在哪里,它都会在完成自身之前移动到函数的末尾。 即:

line:1    String method(String i){
line:2        return i;
line:3        extra code here...
line:4        extra code here...
line:5        extra code here...
line:6        extra code here...
line:7        return "fake return";
line:8    }

调试器将始终从第1行到第2行,然后到第8行,然后返回到首先调用它的代码,它将始终返回i,从不“假返回”。

希望这会有所帮助。

答案 1 :(得分:0)

这与" return"的确切构成有关。从一个功能。虽然这取决于平台,但返回通常必须:

  • 将返回代码复制到众所周知的寄存器(x86中的EAX)
  • 从激活记录堆栈中弹出返回地址
  • 重置堆栈指针(和基指针)

只有返回值不同,编译器可以选择生成机器代码(如果是java的字节代码),并从不同位置跳转到它。 Eclipse可能会显示跳转。