【问题标题】:"'this' is not available" in debug windows of Android StudioAndroid Studio 的调试窗口中的“'this' 不可用”
【发布时间】:2016-02-01 13:46:45
【问题描述】:

我在 Android Studio 的调试窗口中收到此消息。这不是静态方法,也不是类。什么意思?

【问题讨论】:

  • 如果你跨过一次会发生什么?
  • @IntelliJAmiya “使用上下文”是什么意思
  • 如果我看 getContext(),它会导致“this”不可用
  • @Blackbelt 如果我跨过去,它会继续进行。 (没有在屏幕截图中完成,因为我的代码发生了变化,但在很多情况下在此类 CameraPreview 中)
  • 可能代码没有在主线程上运行,这就是为什么当您尝试查看与上下文/主线程相关的内容时,您会收到消息“'this' is not available”?

标签: android debugging android-studio hugo-logging


【解决方案1】:

在 Lambda 块中,我们无法评估变量的值。从 lambda 表达式更改为普通表达式解决了我的问题

【讨论】:

  • 很抱歉,当我检查 lambda 与正常之间的调试时,这是真的。但是,android studio 应该能够调试 lambda 吗?还是 google/intelliJ 团队不可能从一开始就开发它?因为我担心将 lambda 更改为正常值时,android studio 会显示警告并建议改用 lambda,但是如果 lambda 本身不可调试,那就很奇怪了...
【解决方案2】:

我认为这是与反射有关的问题。我的项目是使用 Hugo。一旦我禁用它,错误就消失了。

问题已推送:https://github.com/JakeWharton/hugo/issues/127

【讨论】:

  • 谢谢,我用的是 Hugo,一旦 Hugo 被禁用,问题就解决了
  • 这里我没有使用任何 Hugo 但仍然遇到同样的问题,有什么解决方案吗?
  • 我也没用 Hugo 还是有问题。
  • 在我的情况下,当变量位于 lambda 块中时会发生这种情况,我用内部匿名类替换它并返回正常。
【解决方案3】:

this关键字是对当前对象实例的引用,如官方Java中的documentation

在您的情况下,错误消息'this' is not available 表示调试器无法访问(即不知道)当前对象。

【讨论】:

  • 这种行为有什么共同原因吗?
  • 我认为这是因为由于大小和性能原因,该类在编译时没有调试信息。
  • 您是在发布模式还是调试模式下构建?
  • 我假设它处于调试模式,否则我将无法调试。
  • 当然可以,只是你没有看到优化出来的变量;)
【解决方案4】:

当我更改我的 gradle 配置时,我的工作。 这是错误配置:

     buildTypes {
    release {
        minifyEnabled true
        zipAlignEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }

    debug {
        minifyEnabled true
        zipAlignEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

而且,这对我有用。

debug {

        minifyEnabled false
        zipAlignEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }

【讨论】:

  • 这应该被接受为正确答案,对我有用,现在我的手表和调试变量在我调试时开始重新评估! THX @didikee
【解决方案5】:

将'Build Variant'改为调试

【讨论】:

    【解决方案6】:

    我不得不用这个更改之前的debug 代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      相关资源
      最近更新 更多