是否可以在运行该行之后并且在指令指针返回到调用函数之前查看方法的返回值?
我正在调试我无法修改的代码(阅读:不想重新编译第三方库),有时它会跳转到我没有源代码的代码,或者返回表达式具有阻止我的副作用能够在“显示”选项卡中运行表达式。
通常返回值在复合语句中使用,因此变量视图永远不会显示值(因此希望在控制返回调用函数之前查看结果)。
更新:我不能使用表达式查看器,因为语句中有副作用。
此功能已添加到 Eclipse bug 40912 下的 Eclipse 版本 4.7 M2。
要使用它:
跳过 return 语句(使用“Step Over”或“Step Return”)
现在变量视图中的第一行将显示 return 语句的结果,如“[statement xxx] returned:”
有关详细信息,请参阅 Eclipse Project Oxygen (4.7) M2 - New and Noteworthy。
为此找到了一个非常好的捷径。选择返回值的表达式并按
Ctrl + Shift + D
这将显示返回语句的值。这在您不能或不想仅出于调试目的进行更改的情况下非常有用。
希望这可以帮助。
注意:尚未使用第三方库对此进行测试,但它适用于我的代码。在面向 Web 开发人员的 Eclipse Java EE IDE 上对此进行了测试。版本:Juno Service Release 1
Ctrl + Shift + I
对我也有帮助。
return System.currentTimeMillis();
,那么您将得到与实际返回的函数不同的结果!
Apple machine
?
这就是为什么我总是坚持以下模式的方法:
MyReturnedType foo() {
MyReturnedType result = null;
// do your stuff, modify the result or not
return result;
}
我的规则:
只有一个 return 语句,只在方法的末尾(最终允许在它之后)总是有一个本地调用的结果,它保存返回的值,从默认值开始。
当然,最琐碎的吸气剂是例外的。
我也很想知道这个问题的答案。
过去,在处理这样的 3rd 方库时,我所做的是创建一个包装类或子类,委托给父类并在包装/子类中进行调试。但这需要额外的工作。
“现在,当您从方法返回时,在上层方法中,在变量视图中它会显示先前完成的调用的返回值” [1]
艰难的一个。我在 Eclipse 之外的经验是,如果您可能需要查看返回值,最好将其分配给函数中的局部变量,以便返回语句是简单的 return varname;
而不是 return(some * expression || other);
。但是,这对您没有太大帮助,因为您说您不能(或不想)修改甚至重新编译代码。所以,我没有给你一个好的答案——也许你需要重新考虑你的要求。
根据 return 语句,您可以突出显示正在返回的表达式,并且从右键菜单中,应该有类似“评估表达式”的内容(我现在没有 eclipse,但它是这样的)。它将向您显示将要返回的内容。
这有点牵强,但似乎没有一个简单的方法:
您可以使用 AspectJ 对 JAR 进行插桩,以获取您感兴趣的方法的返回值。根据 Eclipse 的文档,AspectJ 程序可以像其他程序一样debugged。
有两个选项可以在不重新编译库的情况下编织您的类:
如果处理二进制 JAR 是可以接受的,则进行编译后编织;
加载时编织,需要在 VM 中激活编织代理。
请参阅 eclipse 文档(上面的链接)以及 AspectJ Development Environment Guide。