java Android Studio调试器突出显示了错误的行
我看不出在执行什么方面有任何功能上的错误,但我只是浪费了一个小时来证明我的代码和编译器正在做他们应该做的事情
考虑此代码:
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的东西)
# 1 楼答案
尝试构建->;重建项目,然后按住Shift+F9键。应用程序上运行的代码已过时
# 2 楼答案
这是dx的一个问题,它是转换Java的构建的一部分。将文件分类为。用于打包到Android中的dx文件。据此:
https://code.google.com/p/android/issues/detail?id=34193
如果一个函数有多条返回路径,dx会将返回指令合并为一条返回指令,因此在调试过程中,调试器无法判断返回属于哪一行,并且无法跳转。这与我在尝试重现您的问题时看到的情况相对应:每次通过循环时,它都执行
if (a == 3)
检查,跳到末尾的return 0
,然后跳回循环中。你看到最后一个^ {CD2}}在循环中间与^ {< CD4}}合并。我怀疑这个问题很快就会得到解决,所以你可能需要学会接受它。对不起,我知道这有点疯狂
# 3 楼答案
以下是对我有用的东西,至少对于进入Android SDK源代码来说是这样的:
build.gradle
文件并相应地设置compileSdkVersion
的值李>compileSdkVersion
更改回原来的位置李>