我目前正在调试一个大约100兆的war文件中的类,在Windows 7下在Tomcat上运行并开始使用“catalina jpda start”,然后该项目被挂钩到Eclipse调试器中。
我已经达到了我正在调试的类已经完全初始化并且调试透视图中的变量视图看起来像:
:> this
:> referenceIds
:> arr$
len$
i$
:> id
其中:>应该类似于白色的右侧三角形,表示可以扩展对象。
我需要与其他开发人员分享'this'对象参考详细信息,他需要知道全部内容才能帮助我。 但 a)没有扩展所有选项(我花了90分钟点击那些扩展三角形,但仍然没有完成,它就像某种形式的递归地狱clickathon)和 b)即使我右键单击上面的内容并单击“复制变量”,它也不会向我提供扩展信息,即点击“复制变量”就可以获得非常不具信息性的信息:
REDACTEDProductsDataBuilder (id=38)
referenceIds String[5] (id=105)
arr$ String[5] (id=105)
len$ 5
i$ 3
id "4:REDACTEDUpsell" (id=117)
我四处寻找有关更简单方法的信息并且没有任何结果。我很擅长使用eclipse调试器,所以请原谅我,如果有一个明显的答案,肯定有一个比点击扩展三角形更简单的方法吗?如果没有,我有替代方案吗?
答案 0 :(得分:3)
似乎没有一种简单的方法可以做到这一点,因为Eclipse很难为整个对象图选择合适的表示形式放在系统剪贴板上。
我建议,为了帮助您进行调试,相关类的重要字段包含在toString()表示中。
或者,您可以考虑获取应用程序的堆转储,并将其发送给远程开发人员。堆转储是应用程序整个内存堆的二进制表示,有很多工具可用于检查Eclipse Memory Analyzer或jhat之类的内容。
答案 1 :(得分:3)
您可以在有趣的类中实现方法toJSON()
,因此在调试时您可以:
this.toJSON()
然后变量表示将改变。
通常我用Jackson lib实现toJSON()
方法来打印所有对象图,如下所示:
String res="";
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
res=objectMapper.writeValueAsString(this);
return res;
答案 2 :(得分:0)
找到this utility(“eVars”),它是Eclipse Variables视图的扩展。据说可以加载和保存变量,但我没有尝试过。