Android Studio调试器窗口中的数字是什么意思?

7

Android Studio调试器

高亮的数字,例如4580、4581等等,代表什么意思?它们不是PID,这已经通过adb shell中的ps命令进行了交叉检查。

2个回答

1
简而言之:这个数字不一定是注册号,它可能是来自ObjectReferenceImpl的ID,该类是Java Debug Interface(JDI)中ObjectReference接口的实现。

长度: 从Idea Community代码库的分析中,发现ThreadDescriptorImpl.java (ThreadDescriptorImpl)是提供在调试窗口中显示线程描述的类(请参阅上面呈现问题的图像)。ID被称为thread.uniqueID()。这里的线程是ThreadReferenceProxyImpl类型,它扩展了ObjectReferenceProxyImpl,其中实现了uniqueID方法。这个方法反过来从ObjectReference类型的对象返回一个uniqueID。通过粗略搜索,在Idea代码库中未找到满足条件的ObjectReference定义。后来发现它隐藏在JDI接口的定义中。从Idea设置中找到的JDI实现jar中,发现ObjectReferenceImpl提供了uniqueID方法的最终实现。以下是代码片段 -

  private long myID;

  private static synchronized long nextID()
  {
    return nextID++;
  }

  ObjectReferenceImpl(VirtualMachine aVm, Oop oRef)
  {
    super(aVm);
    this.saObject = oRef;
    this.myID = nextID();
  }

  public long uniqueID()
  {
    return this.myID;
  }

然而,在回答这个问题时,使用了“可能”和“可能是”等词语,因为在Idea Community版的源代码中没有立即找到ObjectReference实现的引用。推断是来自于jar实现。如果将来有人查看此问题并提供直接引用,则可以修改答案以反映确定性。

1
这个数字是存储对象引用的寄存器的注册号注册号是什么? 从应用程序开发者的角度来看,它是完全无用的!我相信您知道Android应用程序运行的Dalvik VM。因此,Dalvik字节码中的帧由寄存器组成。这些寄存器存储对象引用。查看此链接以了解更多。不确定为什么Android Studio在调试器中显示它们。我看不到任何用处。

谢谢,您能提供更多的参考资料吗? - pkz
那是我找到的唯一一个... 通过谷歌搜索挖掘,也许你会找到一些东西。 - nupadhyaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接