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

时间:2014-02-16 00:54:22

标签: java android debugging 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的东西)

3 个答案:

答案 0 :(得分:43)

这是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合并。

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

答案 1 :(得分:2)

尝试构建 - >重建项目,然后按Shift + F9。你已经过时了在应用程序上运行的代码。

答案 2 :(得分:2)

这对我有用,至少是为了进入Android SDK源代码:

  1. 安装 SDK平台 Android SDK来源 完全 Android版本的API级别您正在开发期间运行(使用Android version history页面查找您的设备所具有的API级别。)
  2. 编译您的应用完全该版本。例如,在Android Studio中,打开应用的build.gradle文件并相应地设置compileSdkVersion的值。
  3. 调试您的应用。当您进入Android SDK源代码时,您应该看到正确的行。
  4. (可选)在部署之前使用最新的SDK重新编译。换句话说,请更改compileSdkVersion