如何调试位于堆上的对象?(eclipse java)

如何调试位于堆上的对象?(eclipse java),java,eclipse,debugging,stack,heap,Java,Eclipse,Debugging,Stack,Heap,我试图调试位于jar上的类,但我无法“看到”显示选项中的对象 有人告诉我,原因可能是此类中的对象位于堆上,而不是堆栈上 如何在调试模式下访问这些对象?您不调试对象或类。您可以调试方法。在要调试的对象的方法中放置一个断点,在调用此方法时可以检查此对象的内容 如果您有一个包含对象B集合的对象A,请在A的方法中放置一个断点,当调用此方法时,您将能够检查其B集合 但是,您不能只在调试中启动并查看堆上的所有对象。要确定你要找的人可能非常困难。首先,你混淆了一些概念。对象实例分配在所谓的堆内存上,也称为堆内

我试图调试位于jar上的类,但我无法“看到”显示选项中的对象

有人告诉我,原因可能是此类中的对象位于堆上,而不是堆栈上


如何在调试模式下访问这些对象?

您不调试对象或类。您可以调试方法。在要调试的对象的方法中放置一个断点,在调用此方法时可以检查此对象的内容

如果您有一个包含对象B集合的对象A,请在A的方法中放置一个断点,当调用此方法时,您将能够检查其B集合


但是,您不能只在调试中启动并查看堆上的所有对象。要确定你要找的人可能非常困难。

首先,你混淆了一些概念。对象实例分配在所谓的堆内存上,也称为堆内存。方法调用(在这些实例上)放在堆栈内存空间中,也称为堆栈上的方法调用。在Java(和通用OOP)术语中查找堆和堆栈内存的概念,以获得更好的想法

其次,当您添加一个断点,在Eclipse中调试您的程序时,该断点会被执行击中,并显示Eclipse调试透视图,您应该注意多个方面:

  • 您可以查看当前实例的全局(类级别)字段及其值(在视图的右上角的“变量”选项卡中)。您还可以查看正在调试的方法的局部变量+这些变量的值

  • 您还可以看到堆栈(在视图的右上角),即位于堆栈空间中的方法链,这些方法在调试器停止的当前方法之前被调用

  • 当您调试自己的一个类时,您将清楚地看到您在代码中的位置(这是视图下部的一个大窗口)-这是因为该类的源代码可供Eclipse使用。但是,如果继续调试,您可能会偶然发现一个方法调用进入到一个类的实例中,而该类的源代码是您没有的(例如,如果您的项目使用某个外部jar,而您当前的方法调用使用该外部jar中某个类实例的某个方法)。此时,Eclipse无法再在视图的下半部分显示“漂亮”的代码,它只显示一些混乱(编译的字节码)以及一个允许您附加的按钮(如果可用)外部jar的源代码,以便正确显示。如果使用“附加源代码”按钮,您可以浏览并选择jar的源代码。对于大多数(至少是好的源代码)jar库中,您还可以获得一个单独的jar,其中包含源代码,您应该下载这些源代码并将其附加到实际的jar中,以便能够对其进行调试


对于没有代码的类,可以使用 这将反编译类文件并向您显示代码。您可以调试、查看变量值、控制流,但不能进行任何编辑

还有一个选择是为需要调试的jar附加源文件,但在这种情况下,您也不能进行编辑

大多数情况下,您不会在第三方JAR中进行更改。如果确实有必要,请获取可用的源代码

还有一种方法是,一旦类被反编译,在项目中的同一路径下复制java文件中的内容。现在,这个类将从u r代码中而不是jar中选取,并且您还可以
进行更改

我担心OP想要调试源代码在其工作区中不可用的类?@user986180:true?@user986180:是的,你是对的,这是用户的问题。他不需要关于如何添加和使用断点的说明。你是对的。我知道如何定位断点。问题确实是这些类在我的工作区中不可用。我正在尝试调试位于jar中的代码,但无法访问源代码。我很高兴您的帮助。为了清楚起见,调试不仅仅是内部方法。您还可以在构造函数或静态初始值设定项块内设置调试断点。