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

时间:2018-09-27 19:33:58

标签: android android-studio

Android Studio Debugger

突出显示的数字示例4580、4581等是什么意思?它们不是PID,在adb shell中使用ps命令进行了交叉检查。

2 个答案:

答案 0 :(得分:1)

该编号是存储对象引用的寄存器的寄存器编号

什么是注册号?

从应用程序开发人员的角度来看,完全没有用的东西!我确定您知道运行Android应用程序的Dalvik VM。因此,Dalvik字节码中的帧由寄存器组成。这些寄存器存储对象引用。检查此链接以了解more。不知道为什么Android Studio在调试器中显示它们。我看不到有任何用途。

答案 1 :(得分:0)

简而言之:该数字不一定是寄存器号,它可能是ObjectReferenceImpl的ID,该ID是Java调试接口(JDI)的ObjectReference接口的实现。

长度:根据对Idea Community代码库ThreadDescriptorImpl.javaThreadDescriptorImpl)的分析,发现该类是负责提供要在其中显示的线程描述的类。调试窗口(请参阅上面随问题提供的图像)。该ID被称为thread.uniqueID()。这里的线程是ThreadReferenceProxyImpl类型的,它扩展了ObjectReferenceProxyImpl,其中实现了uniqueID方法。该方法又从ObjectReference类型的对象返回唯一ID。粗略搜索时,在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;
  }

但是,这样说并回答问题时,使用了诸如“可能”和“可能是”之类的词,因为ObjectReference实现的参考在Idea Community Edition源代码中没有立即找到。而且,这些推论来自jar的实现。如果将来要由查看此问题和答案的人提供直接参考,则可以修改答案以反映确定性。