就执行的内容而言,我看不出任何功能上的错误,但我只是浪费了一个小时来证明我的代码和编译器正在做他们应该做的事情。
考虑这段代码:
public int getAnswer(int a) {
int retval = 18;
int x = 25;
int y = 50;
while (a-- > 0) {
if (a == 3) {
retval = a;
return retval;
}
}
x = 10;
y = 20;
return 0;
}
调用
int theAnswer = getAnswer(6);
在包含 return
的两行都断点,在运行代码之前,尝试预测结果,从而预测哪一行会被命中。
正如您可能从我的问题的语气中想象的那样,错误的行被突出显示,但返回了正确的结果。如果您单步执行代码,它会跳来跳去。
有什么可以不同的配置来显示正确的行吗? (我正在使用最新的 Android Studio,我很欣赏它可能不稳定,但我确信我在 Eclipse 上看到过类似的行为,但我从来没有花时间去追踪它;也许这是一个 java 的事情) .
最佳答案
这是 dx 的一个问题,它是构建的一部分,它将您的 Java .class 文件转换为 .dx 文件以打包到 Android 中。据此:
https://code.google.com/p/android/issues/detail?id=34193
如果一个函数有多个返回路径,dx 会将返回指令合并为一条返回指令,所以在调试过程中,调试器无法判断返回属于哪一行,事情会跳来跳去。这对应于我在尝试重现您的问题时看到的内容:每次通过循环它都会执行 if (a == 3)
检查,跳转到 return 0
最后,然后跳回循环。您会看到最后一个 return 0
在循环中间与 return retval
合并。
我怀疑这个问题很快就会得到解决,所以你可能只需要学会忍受它。抱歉,我知道这有点疯狂。
关于java - Android Studio 调试器突出显示错误的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805868/