Eclipse调试器跳转到错误的return语句

时间:2011-07-12 21:35:15

标签: java android eclipse debugging

我遇到了一个非常奇怪的情况。我在Android 2.1平台上使用Java(通过Eclipse Galileo)执行以下操作:

// Get gravity & geomagnetic data to return to the caller.
final int SIZE_GRAVITY = 3, SIZE_GEOMAGNETIC = 3;
final float[] NOT_USED = null;
float[] outGravity = new float[SIZE_GRAVITY];
float[] outGeomagnetic = new float[SIZE_GEOMAGNETIC];
final String NO_DATA_COULD_BE_READ = null;
boolean succeeded = SensorManager.getRotationMatrix(NOT_USED, NOT_USED, outGravity, outGeomagnetic);
if (!succeeded)
{
    return NO_DATA_COULD_BE_READ;
}

Log.v("Test", "This should be printed - but it isn't!!");

// Prepare the data to return.
final int X = 0, Y = 1, Z = 2;
final String FIELD_SEPARATOR = ",", VECTOR_SEPARATOR = ";";
String returnValue = "" +
    outGravity[X] + FIELD_SEPARATOR +
    outGravity[Y] + FIELD_SEPARATOR +
    outGravity[Z] + VECTOR_SEPARATOR + 
    outGeomagnetic[X] + FIELD_SEPARATOR +
    outGeomagnetic[Y] + FIELD_SEPARATOR +
    outGeomagnetic[Z];

// Return data.
return returnValue;

SensorManager.getRotationMatrix(...)返回false时,Eclipse调试器会显示if (!succeeded)的if语句突然跳转到return returnValue;。抛出没有异常,LogCat - 即使在详细模式下 - 也不会收到异常消息。它甚至没有收到我在代码中输入的消息。我尝试了明显的清理和重启Eclipse方法,但没有帮助。我很困惑。

Eclipse调试器告诉我正在调用第二个return语句。但是,在显示第一个return语句实际上是达到的语句的显示中添加其他打印语句。也许我偶然发现了一个Eclipse bug?或者任何人都可以解释这种异常现象?

3 个答案:

答案 0 :(得分:3)

看起来succeeded是假的。当您执行任何return时,调试将使方法看起来像跳到底部return。在

之前记录日志
  return NO_DATA_COULD_BE_READ;

答案 1 :(得分:2)

我猜,你有误解。控件未到达最后一个return语句,因为之前的return语句正在执行。

 return NO_DATA_COULD_BE_READ;

由于succeeded结果为false(如您所说),if条件已满足,然后只返回null的{​​{1}}值字符串,它位于if条件块内。

因此,根据观察情况,永远不会达到NO_DATA_COULD_BE_READ

答案 2 :(得分:2)

你怎么确定它会跳到最后return?你在if中有return,这很可能是这个被调用的。{/ p>