是否可以在该行运行之后、指令指针返回到调用函数之前查看方法的返回值?

我正在调试无法修改的代码 (读:不想重新编译第三方库), ,有时它会跳转到我没有源代码的代码,或者返回表达式有副作用,使我无法在 展示 标签。

返回值通常用在复合语句中,因此 变量 view 永远不会向我显示该值(因此希望在控制返回到调用函数之前查看结果)。

更新: 我无法使用表达式查看器,因为语句中有副作用。

有帮助吗?

解决方案

此功能已添加到 Eclipse 版本 4.7 M2 下 Eclipse 错误 40912.

使用方法:

  • 跨过 return 语句(使用“Step Over”或“Step Return”)
  • 现在变量视图中的第一行将显示 return 语句的结果,如“[statement xxx] returned:”

Eclipse Project Oxygen (4.7) M2 - 新功能且值得注意 了解详情。

其他提示

找到了一个非常好的捷径。 选择返回值的表达式,然后按

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;
}

我的规则:

  1. 只有一个return语句,只在方法结束时(最后允许在它之后)
  2. 始终拥有一个本地调用结果,该结果保存返回值,从默认值开始。
  3. 当然,最琐碎的吸气剂是免税的。

我很想知道这个问题的答案。

过去,在处理类似的第三方库时,我所做的是创建一个包装类或子类,该类委托给父类并在包装器/子类中进行调试。这需要额外的工作。

"现在,当您从方法返回时,在上部方法中,在变量视图中,它显示先前完成的调用的返回值“ [1]

[1] https:/ /coffeeorientedprogramming.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 可以接受,则进行编译后编织;

  • 加载时编织,需要在虚拟机中激活编织代理。

请参阅 eclipse 文档(上面的链接)以及 AspectJ 开发环境指南.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top