Java 在Eclipse中调试时,我可以在返回之前找到返回值吗?
行运行之后,指令指针返回调用函数之前,是否可以看到方法的返回值 我正在调试无法修改的代码(读:不想重新编译第三方库),有时它会跳转到没有源代码的代码,或者返回表达式有副作用,使我无法在“显示”选项卡中运行表达式 通常在复合语句中使用返回值,因此Variables视图永远不会向我显示该值(因此希望在控件返回调用函数之前看到结果)Java 在Eclipse中调试时,我可以在返回之前找到返回值吗?,java,eclipse,debugging,return-value,Java,Eclipse,Debugging,Return Value,行运行之后,指令指针返回调用函数之前,是否可以看到方法的返回值 我正在调试无法修改的代码(读:不想重新编译第三方库),有时它会跳转到没有源代码的代码,或者返回表达式有副作用,使我无法在“显示”选项卡中运行表达式 通常在复合语句中使用返回值,因此Variables视图永远不会向我显示该值(因此希望在控件返回调用函数之前看到结果) 更新:我不能使用expression viewer,因为声明中有副作用。很难。在Eclipse之外,我的经验是,如果您可能需要查看返回值,最好将其分配给函数中的局部变量,
更新:我不能使用expression viewer,因为声明中有副作用。很难。在Eclipse之外,我的经验是,如果您可能需要查看返回值,最好将其分配给函数中的局部变量,以便return语句是一个简单的
returnvarname
和not返回(一些*表达式| |其他)代码>。但是,这对您并没有太大的帮助,因为您说您不能(或不想)修改甚至重新编译代码。因此,我没有一个好的答案给你-也许你需要重新考虑你的要求。根据返回语句,你可以突出显示返回的表达式,从右键单击菜单中,应该有类似“evaluate expression”的内容(我现在前面没有eclipse,但它是这样的)。它将向您显示将要返回的内容 我也想知道这个问题的答案
过去,在处理第三方库时,我所做的是创建一个包装类或子类,委托给父类,并在包装/子类中进行调试。但这需要额外的工作。这就是为什么我始终坚持以下方法模式:
MyReturnedType foo() {
MyReturnedType result = null;
// do your stuff, modify the result or not
return result;
}
我的规则:
只有一个return语句,仅在方法末尾(最后允许在它后面)
始终有一个本地调用的结果,该结果保存从默认值开始的返回值
当然,最琐碎的getter是可以豁免的。此功能是在Eclipse版本4.7 M2下添加的
要使用它:
- 跳过
return
语句(使用“跳过”或“逐步返回”)
- 现在变量视图中的第一行将显示return语句的结果,如“[statement xxx]returned:”
有关详细信息,请参阅。这有点牵强,但似乎没有简单的方法:
您可以使用AspectJ向JAR插入方面,这些方面可以获取您感兴趣的方法的返回值。根据Eclipse的文档,AspectJ程序可以像其他程序一样
有两个选项可以在不重新编译库的情况下编织类:
- 如果处理二进制JAR是可接受的,则进行编译后编织
- 加载时编织,这需要在VM中激活编织代理
请参阅eclipse文档(上面的链接)和。这实际上是eclipse中一个长期存在的bug,可以追溯到IDE的最初几天:找到了一个非常好的快捷方式。
选择返回值的表达式,然后按
Ctrl + Shift + D
这将显示return语句的值。当您不能或不想仅仅为了调试目的而更改时,这非常有用
希望这有帮助
注意:我还没有用第三方库测试过它,但它在我的代码中运行良好。
在EclipseJavaEEIDE上为Web开发人员测试了这一点。版本:Juno Service Release 1“现在,当您从方法返回时,在上面的方法中,在变量视图中,它会显示以前完成的调用的返回值”[1]
[1] 在我的代码中,我通常有中间步骤,以便检查结果,但我正在使用的一些代码有太多的组织开销需要修改(特别是,如果库得到更新,我真的不想只为了调试而维护分叉版本)。问题是评估返回功能时会产生副作用(例如,与创建数据库条目一样),计算返回表达式将更改系统状态。不过,感谢您的建议。此解决方案的问题(除了您提到的关于额外工作的问题)只有在外部库中没有多个类/方法的情况下,它才有效。但在处理方法的外层时,它很有用。嘿,zvikico-当我编写自己的代码时,我通常使用类似的模式。不幸的是,我的问题是当我使用的代码不是由我编写或修改的。:SI do this t哦,但是索纳林特在抱怨……现在我模棱两可地说:@WitoldKaczurba这是你的意见,没关系。接受其他意见,并对那些有意见的人表示尊重。嗨,兹维科。谢谢你的消息。我接受有不同的方法,但我提到过。干杯这就是我为什么切换到社区版的我ntelliJ——Eclipse的人似乎不明白这有多重要。(如果他们能修复它,我会在它发布的那天切换回来。)@James Mitchell这看起来是一个插件的好主意。我会将它添加到我的待办事项列表中,并在我有时间的时候尝试去做(不会很快)@user672348但在IntelliJ IDEA中如何做到这一点?@AlexeyTigarev:IIRC,当您执行“步进返回”(或同等操作)时,它只会显示出来。准备好Eclipse Oxygen(2017年年中发布日期)..+1因为这不仅适用于返回值,而且适用于一般表达式。比使用表达式选项卡方便得多。应该注意,这会执行代码,因此如果有副作用,请小心。Ctrl+Shift+I
对我也很有帮助。如@goat所述,这会多次执行代码