在运行该行之后,在指令指针返回到调用函数之前,是否可以看到方法的返回值?
我正在调试无法修改的代码(阅读:不想重新编译第三方库),有时它会跳转到我没有源代码的代码,或者return表达式有副作用,使我无法只需在“ 显示”标签中运行表达式即可。
通常在复合语句中使用返回值,因此Variables视图将永远不会向我显示该值(因此希望在控件返回到调用函数之前先查看结果)。
更新:我不能使用表达式查看器,因为该语句中有副作用。
在运行该行之后,在指令指针返回到调用函数之前,是否可以看到方法的返回值?
我正在调试无法修改的代码(阅读:不想重新编译第三方库),有时它会跳转到我没有源代码的代码,或者return表达式有副作用,使我无法只需在“ 显示”标签中运行表达式即可。
通常在复合语句中使用返回值,因此Variables视图将永远不会向我显示该值(因此希望在控件返回到调用函数之前先查看结果)。
更新:我不能使用表达式查看器,因为该语句中有副作用。
Answers:
此功能已添加到Eclipse错误40912下的Eclipse 4.7 M2版本中。
要使用它:
return
语句(使用“ Step Over”或“ Step Return”)有关详细信息,请参阅Eclipse Project Oxygen(4.7)M2-新功能和值得注意的功能。
找到了一个非常好的快捷方式。选择返回值的表达式,然后按
Ctrl + Shift + D
这将显示return语句的值。在您不能或不想仅出于调试目的而进行更改的情况下,这确实很有用。
希望这可以帮助。
注意:尚未使用第三方库对此进行测试,但是对于我的代码而言,它运行良好。在针对Web开发人员的Eclipse Java EE IDE上进行了测试。版本:Juno Service Release 1
Ctrl + Shift + I
对我也有帮助
return System.currentTimeMillis();
,那么您将获得与实际返回的函数不同的结果!
Apple machine
?
这实际上是Eclipse中一个长期存在的错误,可以追溯到IDE的第一天:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 40912
这就是为什么我始终坚持使用以下方法模式的原因:
MyReturnedType foo() {
MyReturnedType result = null;
// do your stuff, modify the result or not
return result;
}
我的规则:
自然,最琐碎的吸气剂是免税的。
我也很想知道这个问题的答案。
过去,像这样处理第三方库时,我要做的是创建一个包装类或子类,委托给父类,然后在包装子类中进行调试。但是,这需要额外的工作。
“现在,当您从某个方法返回时,在上部方法的变量视图中,它显示先前完成的调用的返回值” [1]
[1] https://coffeeenedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
坚强的。我在Eclipse之外的经验是,如果您可能需要查看返回值,则最好将其分配给函数中的局部变量,这样return语句将变得简单return varname;
而不是return(some * expression || other);
。但是,这对您没有明显的帮助,因为您说您不能(或不想)修改甚至重新编译代码。因此,我对您没有一个好的答案-也许您需要重新考虑您的要求。
根据return语句,您可以突出显示要返回的表达式,然后从右键单击菜单中选择“ evaluate expression”(评估表达式)之类的东西(我现在没有先见之明,但是就像这样) )。它会告诉您将要退还什么。
这有点牵强,但似乎没有一种简单的方法:
您可以使用AspectJ来利用具有您感兴趣的方法的返回值的方面来对JAR进行检测。根据Eclipse的文档,可以像其他程序一样调试 AspectJ 程序。
有两种方法可以编织类而不重新编译库:
如果可以接受二进制JAR,则进行编译后编织;
加载时编织,这需要在VM中激活编织代理。
请参阅Eclipse文档(上面的链接),以及《AspectJ开发环境指南》。