3

我目前正在从大约 100 兆的 war 文件中调试类,在 Windows 7 下的 Tomcat 上运行并开始使用“catalina jpda start”,然后将项目连接到 Eclipse 调试器中。

我已经到了我正在调试的类已经完全初始化并且调试透视图中的变量视图看起来像这样的地步:

:> this
:> referenceIds
:> arr$
   len$
   i$
:> id

其中 :> 应该类似于指示对象可以展开的白色右向三角形。

我需要在场外与另一位开发人员分享“this”对象参考详细信息,他需要了解全部内容才能帮助我。但是a)没有展开所有选项(我花了90分钟点击那些展开三角形,但还没有完成,这就像某种形式的递归地狱点击马拉松)和b)即使我右键单击上面并单击“复制变量” ',它没有给我扩展的信息,即点击'this'上的'copy variables'给了我非常无信息的信息:

REDACTEDProductsDataBuilder  (id=38)    
referenceIds    String[5]  (id=105) 
arr$    String[5]  (id=105) 
len$    5   
i$  3   
id  "4:REDACTEDUpsell" (id=117) 

我四处寻找有关更简单方法的信息,但一无所获。我在使用 eclipse 调试器方面非常新,所以如果有一个明显的答案,请原谅我,肯定有比花一天时间点击扩展三角形更简单的方法吗?如果没有,我还有其他选择吗?

4

3 回答 3

4

您可以在有趣的类中实现一个方法toJSON(),因此在调试时您可以:

  1. 右键单击有趣的变量(有趣类的有趣实例) d
  2. 单击“新建详细信息格式化程序”
  3. 添加以下代码片段:this.toJSON()

然后变量表示会改变。

通常我toJSON()用 Jackson lib 实现方法来打印所有对象图,如下所示:

String res="";
ObjectMapper objectMapper=new ObjectMapper();   
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
res=objectMapper.writeValueAsString(this);
return res;
于 2013-03-29T17:38:58.563 回答
3

似乎没有一种简单的方法可以做到这一点,因为 Eclipse 很难为整个对象图选择一个合适的表示来放在您的系统剪贴板上。

我建议为了帮助您进行调试,相关类的重要字段包含在它的 toString() 表示中。

或者,您可以考虑获取应用程序的堆转储,并将其发送给远程开发人员。堆转储是应用程序整个内存堆的二进制表示,有很多工具可用于检查其中之一,例如Eclipse Memory Analyzerjhat

于 2012-09-05T14:04:20.160 回答
0

找到了这个实用程序(“eVars”),它是 Eclipse 变量视图的扩展。据说有加载和保存变量的能力,虽然我没试过。

于 2016-08-05T16:25:45.767 回答