debugging 调试时找不到局部变量

cnjp1d6j  于 2023-06-23  发布在  其他
关注(0)|答案(3)|浏览(512)

我正在尝试使用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
有人遇到同样的问题吗?

r3i60tvu

r3i60tvu1#

它可能是工具链的某个部分进行的优化,例如删除死代码,转义分析,或者实际上是运行时中的错误,请参阅一些可能性:https://www.guardsquare.com/en/blog/proguard-and-r8
也许对代码进行单元测试并使用调试日志对其进行注解会更成功。

np8igboo

np8igboo2#

这可能是一个有点不同的情况,但消息也可能表明你已经修改了数据查看器的对象/节点是如何在IDE中呈现(特别是在调试时)。
Unable to evaluate the expression Cannot find local variable 'JsonAutoDetect'
我碰巧忘记了我做了一个自定义渲染器来读取Java对象作为JSON。
解决方案是“使用默认渲染器”或只是禁用渲染器。

w3nuxt5m

w3nuxt5m3#

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

class MyClass{
  private MyObject myObject;

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

相关问题