调试时如何直接在IDE中查看其他对象的私有字段?

Jef*_*ado 10 java eclipse

C#是我最熟悉的语言,但在工作时使用Java.我想你可以说我对使用Visual Studio IDE很满意.我喜欢它的调试器之一是我可以为任何表达式放置监视变量(Eclipse中的"表达式").因此,我可以在调试时查看公共或非公共特定字段的值,调用方法等,没有问题.

我似乎不能在Eclipse中做同样的事情.我不得不求助于为字段调用相关的getter方法(假设它有一个).如果它没有,我要么暂时添加一个,所以我可以查看它,记得在我完成时删除它或者我只是SOL.

如何在一个私有字段上为对象设置监视表达式?或者我只是做错了,我必须制作特殊的表达方式来查看它们?
(或者,有没有更好的方法来获取我想要的信息?)

例如,

我有一个HttpServletRequest想要留意的requestURI.如果我只是观察请求变量,它会列出很多字段,而且信息太多了.我只对对象中的一件事感兴趣,所以为了最小化这个,我想为这一件事添加一个表达式.

字段名称显然是requestURI这样我添加了表达式:request.requestURI.Eclipse抛出一个错误,说它不是一个字段(它是,它只是不公开).我不得不直接去场地,而是去吸气器:request.getRequestURI()这很好.但我不能总是指望吸气剂可用.

变量视图
变量视图

表达式视图
表达式视图

Joã*_*ndt 8

Eclipse评估表达式,考虑私有/受保护字段Declared Type,而不是Actual Type.

例:

Number n1 = new Integer(1000);
Integer n2 = new Integer(1000);
Run Code Online (Sandbox Code Playgroud)

表达式:

n1.value  can't be evaluate
n2.value  returns 1000, perfectly
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用DetailFormatter(右键单击变量> New Detail Formatter).

当显示类型对象的文本表示时,Eclipse将使用此表达式而不是toString()方法(例如,在"变量视图"中).

你的DetailFormatter(for ApplicationHttpRequest)可以是:

requestURI 
Run Code Online (Sandbox Code Playgroud)

要么

"URI: " + requestURI + "\n" +
"Path: " + servletPath
Run Code Online (Sandbox Code Playgroud)


tit*_*geo 5

如果字段是private或者protected,eclipse表达式将正确评估无关紧要.但变量的范围很重要.

如果我错了,请纠正我.

requestURI是一个受保护的字段,org.apache.catalina.core.ApplicationHttpRequest其中实现了HttpServletRequest.在您的情况下,变量request的类型为HttpServletRequest,您尝试访问HttpServletRequest.requestURI并且此字段不存在且eclipse失败.我认为这是正常的.如果你做正确的演员,表达式将正确评估.