Android Studiodebugging器强调错误的行

我看不出执行什么function上的错误,但是我只是浪费了一个小时来certificate我的代码,编译器正在做他们应该做的事情。

考虑这个代码:

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的行和在运行代码之前断点,尝试并预测结果,并因此命中哪一行。

正如你可以从我的问题的口气想象,错误的行被突出显示,但正确的结果被返回。 如果你通过代码,它跳舞了很多。

是否有任何可以configuration不同,以便正确的行显示? (我正在使用最新的Android Studio,我认为这可能是不稳定的,但是我确定在Eclipse上我已经看到了类似的行为,但是我从来没有花时间跟踪它;也许这是一个Java的东西) 。

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

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

如果一个函数有多个返回path,dx将返回指令合并成一个返回指令,所以在debugging过程中,debugging器不能知道返回是属于哪一行,而是跳转。 这相当于当我试图重现你的问题时所看到的:每一次通过循环它都会执行if (a == 3)检查,跳转到最后的return 0 ,然后跳回到循环中。 你看到最后的return 0与循环中间的return retval合并。

我怀疑这个问题会在短期内得到解决,所以你可能需要学会和它一起生活。 对不起,我知道这有点疯狂。

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

以下是对我有用的东西,至less对于Android SDK源代码是如此:

  1. 安装 适用于Android SDKSDK平台源代码,确保您在开发期间运行的Android版本的 API级别(使用Android版本历史logging页面查找您的设备具有哪个API级别)。
  2. 编译你的应用程序的确切版本。 例如,在Android Studio中,打开应用程序的build.gradle文件并相应地设置compileSdkVersion的值。
  3. debugging你的应用程序 当您踏入Android SDK源代码时,您应该看到正确的行。
  4. (可选)在部署前使用最新的SDK重新编译 。 换句话说,把compileSdkVersion改回来。