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

标签 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 的事情) .

最佳答案

这是 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/

相关文章:

java - 我怎样才能在struts2的jsp页面上显示我的数据

android - NDK12b : Different ELF produced by clang vs gcc using the standalone toolchain and the same build scripts

bash - 源文件如何继承陷阱 DEBUG?

java - Eclipse 挂起一个特定的线程,同时让其他线程运行

java - Eclipse 条件断点损坏了吗?

java - Spark 2.1.0 : Reading compressed csv file

java - 记录 .class 文件中的值,可能使用 AOP 进行拦截

java - 向客户端发送请求后如何从webview获取响应

android - onReceive 只工作一次android

android - Realm block Gson 库