Android Studio 调试器突出显示了错误的行

2022-09-01 04:36:32

在执行的内容方面,我看不到任何功能错误,但我只是浪费了一个小时来证明我的代码和编译器正在做他们应该做的事情。

请考虑以下代码:

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

这是dx的一个问题,它是将Java.class文件转换为.dx文件以打包到Android中的构建的一部分。据此:

https://code.google.com/p/android/issues/detail?id=34193

如果一个函数有多个返回路径,dx 会将返回指令合并为单个返回指令,因此在调试期间,调试器无法分辨返回属于哪一行,事情会跳来跳去。这与我在尝试重现您的问题时所看到的情况相对应:每次通过循环时,它都会执行检查,跳到末尾,然后跳回到循环中。你看到最后一个与循环中间的合并。if (a == 3)return 0return 0return retval

我怀疑这很快就会得到解决,所以你可能只需要学会忍受它。对不起,我知道这有点疯狂。


答案 2

尝试“生成 ->”生成“项目,然后尝试 Shift + F9。您在应用程序上运行的代码已过时。