调试时找不到局部变量

时间:2019-09-18 09:12:00

标签: android android-studio debugging build.gradle

我正在尝试使用选项Java Field Watchpoints调试我的应用程序。我的变量是第一次在我的代码中出现(它的初始化),但此后我就遇到了这个错误:

  

找不到本地变量'variableName'

然后我不能遵循它的修改。

我一直在搜索并修改我的gradle文件,如下所示:

   buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
       }
       debug {
           minifyEnabled false
           debuggable true
           testCoverageEnabled = true
       }
   }

我的有效构建版本为debug(未发布),因此错误并非来自此处。 我正在使用Android Studio 3.6 Canary 11

有人遇到相同的问题吗?

2 个答案:

答案 0 :(得分:1)

这可能是对工具链中某些部分的优化,例如删除无效代码,转义分析,或者甚至是运行时中的错误,请查看其中的一些可能性:https://www.guardsquare.com/en/blog/proguard-and-r8

也许单元测试您的代码并用调试日志对其进行注释会更成功。

答案 1 :(得分:0)

您的变量超出范围: 如果在局部作用域(例如循环)中声明了它,或者在函数内部使用try块或带有括号的任何类型的块声明了它。因此,如果在初始化变量之后,下一个执行的语句在该块之外,则您的变量将不再可见并且无法访问(这是Java中局部变量的工作方式)。所以不是错误。 为了进行验证,您可以在类级别声明变量,然后在本地块中进行初始化。在本地块外部仍可以访问该变量。

class MyClass{
  private MyObject myObject;

  public void myFunction(){
          if(....){
            myObject = new MyObject();
          }else{
          }
  }
}