当前位置: 首页 > 面试题库 >

调试Java应用程序时,在堆栈框架中显示变量的哪些信息

祁鸿晖
2023-03-14
问题内容

当我在Intellij Idea中调试Java应用程序时,我在堆栈框架中看到所有变量,如下所示:

object={java.lang.Object@77}


@”后面的数字是什么意思?它不同于hashCode返回的内容。hashCode以十六进制表示形式返回数字2a134eca,等于整数表示形式705908426。数字77和705908426是不同的。


问题答案:

@是自应用程序启动以来的对象计数编号。因此,@ 1012表示自应用启动以来创建的第1012个对象。

它不是身份哈希码。

这里有一些证明:(我之所以这样说是因为我实际上不知道,但是我观察到了)

public static void main(String [] args) throws Throwable {

    Object object = new Object();
    Object object1 = new Object();
    Integer foo = new Integer(5);
    Object object2 = new Object();
    String str = new String("bar");

    System.out.println("code :" + System.identityHashCode(object));

    RuntimeException exception = new RuntimeException();
    exception.printStackTrace(); //put breakpoint here


}

输出:代码:789451787代码:java.lang.Object@2f0e140b

789451787 = 2f0e140b顺便说一下…

IntelliJ调试器的输出:

static = org.boon.core.MyClass
args = {java.lang.String[0]@**97**}
object = {java.lang.Object@**98**}
object1 = {java.lang.Object@**99**}
foo = {java.lang.Integer@**100**}"5"
object2 = {java.lang.Object@**101**}
str = {java.lang.String@**102**}"bar"
exception = {java.lang.RuntimeException@**103**}"java.lang.RuntimeException"

我凭经验知道这一点,但是我不知道实际的实现,但是我认为这与诸如此类的问题有关:

as3:调试时有意义的对象识别。



 类似资料:
  • 根据以下链接,java堆栈框架包含本地变量、操作数堆栈和当前类常量池引用。http://blog.jamesdbloom.com/JVMInternals.html 同样来自Oracle“JVM结构”第2.6节。3.“动态链接-每个帧(§2.6)包含对当前方法类型的运行时常量池(§2.5.5)的引用,以支持方法代码的动态链接。” 我还读到堆中的对象也有一个指向类数据的指针/引用。https://w

  • 我有vframe函数并生成了如下的汇编代码 如果我们看到从8到11行,我们没有在堆栈上推送p的地址,但汇编已经假设 如果我们希望某些参数不被破坏,我们会推送一些寄存器并将被调用者保存的寄存器移动到推送的寄存器。但是,在这种情况下,似乎不是。关于局部变量还有其他约定吗,比如i和

  • 当处于断点时,如何查看调用堆栈以查找被调用方方法/函数?

  • 问题内容: 我是java的新手,并且对错误堆栈跟踪引发的错误格式化并不熟悉,该错误跟踪随后被显示给我的Web应用程序的最终用户。 我对Oracle数据库的经验是,错误堆栈包含内部信息,例如模式和过程名称以及行号,这些信息虽然对调试很有用,但我希望阻止用户看到。这是一个例子: 我要显示给用户的字符串是。我可以使用正则表达式来提取此字符串,因为我知道(1)此字符串始终位于第一行,因此我可以提取错误堆栈

  • 问题内容: 我有这个Python应用程序,它有时会卡住,我找不到位置。 有什么方法可以让Python解释器向您显示正在运行的确切代码吗? 某种动态堆栈跟踪? 问题答案: 我有用于以下情况的模块-进程将长时间运行,但有时由于未知且不可复制的原因而卡住。它有点hacky,并且只能在unix上运行(需要信号): 要使用它,只需在程序启动时在某个时候调用listen()函数(您甚至可以将其粘贴在site.

  • 颤振医生-V: 我的操作系统是Ubuntu18.04,我想使用模拟器进行调试,请帮助我。