我可以在Eclipse中调试时返回返回值吗?

时间:2008-10-19 22:57:18

标签: java eclipse debugging return-value

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

我正在调试代码我无法修改(读取:不想重新编译第三方库),有时它会跳转到我没有源代码的代码或返回表达式具有副作用,使我无法在显示选项卡中运行表达式。

返回值通常用在复合语句中,因此 Variables 视图永远不会显示值(因此希望在控制返回调用函数之前查看结果)。

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

9 个答案:

答案 0 :(得分:34)

此功能已添加到Eclipse bug 40912下的Eclipse版本4.7 M2中。

使用它:

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

有关详细信息,请参阅Eclipse Project Oxygen (4.7) M2 - New and Noteworthy

答案 1 :(得分:34)

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

Ctrl + Shift + D

这将显示return语句的值。如果您不能或不想仅仅为调试目的而进行更改,这非常有用。

希望这有帮助。

注意:没有使用第三方库对此进行测试,但它对我的代码工作正常。 在用于Web开发人员的 Eclipse Java EE IDE上进行了测试。版本:Juno Service Release 1

答案 2 :(得分:5)

这就是为什么我总是坚持使用以下方法:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

我的规则:

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

答案 3 :(得分:5)

这实际上是Eclipse中一个长期存在的错误,可以追溯到IDE的最初几天:https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

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

[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/

答案 6 :(得分:0)

艰难的一个。我在Eclipse之外的经验是,如果您可能需要查看返回值,最好将其分配给函数中的局部变量,以便return语句是简单的return varname;而不是{{1 }}。但是,由于您说您不能(或不想)修改甚至重新编译代码,因此对您没有任何帮助。所以,我没有给你一个好的答案 - 也许你需要重新考虑你的要求。

答案 7 :(得分:0)

根据return语句,您可以突出显示正在返回的表达式,并且从右键单击菜单中,应该有类似“evaluate expression”的内容(我现在面前没有eclipse,但它是类似的东西)。它会告诉你将要返回什么。

答案 8 :(得分:0)

这有点牵强,但似乎没有一个简单的方法:

您可以使用AspectJ来检测JAR的方面,这些方面可以获取您感兴趣的方法的返回值。根据Eclipse的文档,AspectJ程序可以像其他程序一样debugged

在不重新编译库的情况下编写类有两种选择:

  • 如果处理二进制JAR是可以接受的,则编译后编织;

  • 加载时织入,需要在VM中激活织布剂。

请参阅eclipse文档(上面的链接)以及AspectJ Development Environment Guide

相关问题