在Eclipse中调试时,在返回之前可以查出返回值吗?
-
03-07-2019 - |
题
是否可以在该行运行之后、指令指针返回到调用函数之前查看方法的返回值?
我正在调试无法修改的代码 (读:不想重新编译第三方库), ,有时它会跳转到我没有源代码的代码,或者返回表达式有副作用,使我无法在 展示 标签。
返回值通常用在复合语句中,因此 变量 view 永远不会向我显示该值(因此希望在控制返回到调用函数之前查看结果)。
更新: 我无法使用表达式查看器,因为语句中有副作用。
解决方案
此功能已添加到 Eclipse 版本 4.7 M2 下 Eclipse 错误 40912.
使用方法:
- 跨过
return
语句(使用“Step Over”或“Step Return”) - 现在变量视图中的第一行将显示 return 语句的结果,如“[statement xxx] returned:”
其他提示
找到了一个非常好的捷径。 选择返回值的表达式,然后按
Ctrl + Shift + D
这将显示return语句的值。如果您不能或不想仅仅为调试目的而进行更改,这非常有用。
希望这有帮助。
注意:没有使用第三方库对此进行测试,但它对我的代码工作正常。 在用于Web开发人员的 Eclipse Java EE IDE上进行了测试。版本:Juno Service Release 1
这实际上是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;
}
我的规则:
- 只有一个return语句,只在方法结束时(最后允许在它之后)
- 始终拥有一个本地调用结果,该结果保存返回值,从默认值开始。 醇>
当然,最琐碎的吸气剂是免税的。
我很想知道这个问题的答案。
过去,在处理类似的第三方库时,我所做的是创建一个包装类或子类,该类委托给父类并在包装器/子类中进行调试。这需要额外的工作。
"现在,当您从方法返回时,在上部方法中,在变量视图中,它显示先前完成的调用的返回值“ [1]
艰难的一个。我在Eclipse之外的经验是,如果你可能需要查看返回值,最好将它分配给函数中的局部变量,以便return语句是一个简单的 return varname;
而不是 return(some * expression || other);
。但是,由于您说您不能(或不想)修改甚至重新编译代码,因此对您没有任何帮助。所以,我没有给你一个好的答案 - 也许你需要重新考虑你的要求。
根据return语句,您可以突出显示正在返回的表达式,并且从右键单击菜单中,应该有类似“evaluate expression”的内容。 (我现在面前没有日食,但它就像那样)。它会告诉你将要返回什么。
这有点牵强,但似乎没有一个简单的方法:
您可以使用 AspectJ 通过获取您感兴趣的方法的返回值的方面来检测 JAR。根据Eclipse的文档,AspectJ程序可以是 调试过的 像其他程序一样。
有两个选项可以在不重新编译库的情况下编织您的类:
如果处理二进制 JAR 可以接受,则进行编译后编织;
加载时编织,需要在虚拟机中激活编织代理。
请参阅 eclipse 文档(上面的链接)以及 AspectJ 开发环境指南.