Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Eclipse中调试时,我可以在返回之前找到返回值吗?_Java_Eclipse_Debugging_Return Value - Fatal编程技术网

Java 在Eclipse中调试时,我可以在返回之前找到返回值吗?

Java 在Eclipse中调试时,我可以在返回之前找到返回值吗?,java,eclipse,debugging,return-value,Java,Eclipse,Debugging,Return Value,行运行之后,指令指针返回调用函数之前,是否可以看到方法的返回值 我正在调试无法修改的代码(读:不想重新编译第三方库),有时它会跳转到没有源代码的代码,或者返回表达式有副作用,使我无法在“显示”选项卡中运行表达式 通常在复合语句中使用返回值,因此Variables视图永远不会向我显示该值(因此希望在控件返回调用函数之前看到结果) 更新:我不能使用expression viewer,因为声明中有副作用。很难。在Eclipse之外,我的经验是,如果您可能需要查看返回值,最好将其分配给函数中的局部变量,

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

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

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


更新:我不能使用expression viewer,因为声明中有副作用。

很难。在Eclipse之外,我的经验是,如果您可能需要查看返回值,最好将其分配给函数中的局部变量,以便return语句是一个简单的
returnvarname
和not
返回(一些*表达式| |其他)。但是,这对您并没有太大的帮助,因为您说您不能(或不想)修改甚至重新编译代码。因此,我没有一个好的答案给你-也许你需要重新考虑你的要求。

根据返回语句,你可以突出显示返回的表达式,从右键单击菜单中,应该有类似“evaluate expression”的内容(我现在前面没有eclipse,但它是这样的)。它将向您显示将要返回的内容

我也想知道这个问题的答案


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

这就是为什么我始终坚持以下方法模式:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}
我的规则:

  • 只有一个return语句,仅在方法末尾(最后允许在它后面)
  • 始终有一个本地调用的结果,该结果保存从默认值开始的返回值

  • 当然,最琐碎的getter是可以豁免的。

    此功能是在Eclipse版本4.7 M2下添加的

    要使用它:

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

    有关详细信息,请参阅。

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

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

    有两个选项可以在不重新编译库的情况下编织类:

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

    • 加载时编织,这需要在VM中激活编织代理


    请参阅eclipse文档(上面的链接)和。

    这实际上是eclipse中一个长期存在的bug,可以追溯到IDE的最初几天:

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

    Ctrl + Shift + D
    
    这将显示return语句的值。当您不能或不想仅仅为了调试目的而更改时,这非常有用

    希望这有帮助

    注意:我还没有用第三方库测试过它,但它在我的代码中运行良好。 在EclipseJavaEEIDE上为Web开发人员测试了这一点。版本:Juno Service Release 1

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


    [1]

    在我的代码中,我通常有中间步骤,以便检查结果,但我正在使用的一些代码有太多的组织开销需要修改(特别是,如果库得到更新,我真的不想只为了调试而维护分叉版本)。问题是评估返回功能时会产生副作用(例如,与创建数据库条目一样),计算返回表达式将更改系统状态。不过,感谢您的建议。此解决方案的问题(除了您提到的关于额外工作的问题)只有在外部库中没有多个类/方法的情况下,它才有效。但在处理方法的外层时,它很有用。嘿,zvikico-当我编写自己的代码时,我通常使用类似的模式。不幸的是,我的问题是当我使用的代码不是由我编写或修改的。:SI do this t哦,但是索纳林特在抱怨……现在我模棱两可地说:@WitoldKaczurba这是你的意见,没关系。接受其他意见,并对那些有意见的人表示尊重。嗨,兹维科。谢谢你的消息。我接受有不同的方法,但我提到过。干杯这就是我为什么切换到社区版的我ntelliJ——Eclipse的人似乎不明白这有多重要。(如果他们能修复它,我会在它发布的那天切换回来。)@James Mitchell这看起来是一个插件的好主意。我会将它添加到我的待办事项列表中,并在我有时间的时候尝试去做(不会很快)@user672348但在IntelliJ IDEA中如何做到这一点?@AlexeyTigarev:IIRC,当您执行“步进返回”(或同等操作)时,它只会显示出来。准备好Eclipse Oxygen(2017年年中发布日期)..+1因为这不仅适用于返回值,而且适用于一般表达式。比使用表达式选项卡方便得多。应该注意,这会执行代码,因此如果有副作用,请小心。
    Ctrl+Shift+I
    对我也很有帮助。如@goat所述,这会多次执行代码