在 Intellij 中调试时,我可以在返回之前找出返回值吗?
Posted
技术标签:
【中文标题】在 Intellij 中调试时,我可以在返回之前找出返回值吗?【英文标题】:Can I find out the return value before returning while debugging in Intellij? 【发布时间】:2011-06-27 23:27:34 【问题描述】:与:
Object method()
...
return /* some complex expression */
有什么方法可以让我在调试时查看返回的值?就像以某种方式设置一个断点,该断点会在返回后立即被命中,但在执行到调用代码之前?我希望能够知道返回值是什么,并且能够查看所有局部变量的值。
我现在的做法是创建一个临时变量:Object ret = /* something complex */; return ret;
。但这很麻烦,而且还增加了额外的不必要的代码行。
注意:这与Can I find out the return value before returning while debugging in Visual Studio 的问题相同,但针对的是 intellij。
【问题讨论】:
请重新阅读答案。至少从 2016.3 开始,有一个更好的方法。有关详细信息,请参阅@Birchlabs 的答案。它现在应该是公认的答案。 同意,Birchlabs 的回答正是我们所要求的。帮了我很多,太棒了! 【参考方案1】:在 IntelliJ IDEA 2016.3 上:它隐藏在调试面板的 cog 按钮内。确保Show Method Return Values
已选中。
使用调试器在某处中断您希望查看其返回值的函数。
退出函数(或跳过直到你退出):
观察返回值出现在你的变量中:
【讨论】:
太棒了!我们是否也可以让条件断点与此一起使用?用例是根据函数的返回值在函数返回之前停止。【参考方案2】:debugger panel 中有观察方法返回值按钮。
查看方法返回值:点击此按钮可查看最后执行的方法的返回值。
IDEA 12 配置:
【讨论】:
“变量”或“手表”选项卡中似乎没有显示任何内容。如果这很重要,我正在使用 Groovy。此外,这似乎将显示从调用代码的上下文执行的最后一个方法的返回值,而不是从方法本身的上下文。这样做的重要区别在于,如果你可以从方法本身的上下文中看到,也可以查看方法的局部变量的值。如果方法返回的值不正确,这可以让您查看发生了什么问题。 它在“变量”窗格中显示返回值(使用完全限定的方法名称)。这应该是公认的答案。 @CrazyCoder +1 来自我 :-) @CrazyCoder:IDEA 13 还存在这个功能吗?我找不到它。 我在 Intellij 15 上,也没有看到这个。可以发个截图吗? 2017 年 1 月(想法 2016.3.2):您必须单击“设置”图标(齿轮,位于第二张图像的黄色菜单项正上方),菜单显示包括“显示方法返回值”。无需重新启动任何东西:在下一次从方法返回后,它的 ObjectClassName.methodName() 会出现在 this 正下方的 Variables 视图中。【参考方案3】:似乎有几种方法可以做到这一点。第一个涉及在方法签名上设置断点,在您的情况下,您将在 Object method() 上设置断点。这将允许您注意方法的入口和出口。我相信您必须将它与上述“Watch 方法返回值” 结合使用,但我无法完全测试它,因为计算时间太长。请注意,这确实会显着降低调试器的性能,并且调试时间会更长。
您也可以手动执行以下操作。
-
在返回行设置断点。
当点击回车线时,点击回车线,具体将光标放在您要查看的操作上,然后转到运行->评估表达式(或Alt-F8),它应该运行表达式该点并返回它返回的内容。
注意:如果你创建了一个断点,有很多事情你可以告诉 IDEA 来处理它们,比如如果你在断点处中断,你可以告诉他们执行一个表达式并记录下来。如果您右键单击断点并单击属性,您可以环顾四周。
更新: 结合第一种方法尝试此操作。不要使用“观察方法返回值”,因为它似乎会减慢或冻结调试会话。而是执行以下操作
-
右键单击要查看的返回表达式,然后单击“添加到手表”
接下来添加一个方法断点,如上所述。
调试您的程序,您的方法将中断方法签名。
按 F9 键继续,它应该会再次中断AFTER返回表达式已计算,您的返回表达式应该在监视列中。
请记住,方法断点较慢,因此可能需要更多时间,如果您注意到过多的性能损失,一个棘手的改进方法是设置 return 语句断点(没有方法断点),然后添加方法断点AFTER返回语句断点命中然后继续。
希望这会有所帮助,
【讨论】:
实际上,一旦你给 (new X()) 添加了一个断点和一个监视,那么你可以简单地在那个监视上执行 Alt+F8 来“分析”返回的对象。这真的很有用。 如果我理解正确,这里提出的解决方案只有在表达式没有副作用的情况下才有效。一般来说,我绝对不建议将复杂的表达式放在变量/监视窗口中。 至少从 2016.3 开始,有一个更好的方法。有关详细信息,请参阅 Birchlabs 的答案。它现在应该是公认的答案。【参考方案4】:前段时间有人问过这个问题,但是当我想处理这种情况时,我使用了不同的方法。
调试时,您可以标记表达式(在您的情况下,“return”之后的表达式)并按 CTRL + ALT + F8(快速评估表达式)。 IntelliJ 会弹出一个小窗口,显示将返回的值。
【讨论】:
如果您使用英特尔图形芯片,则此键盘快捷键will shut down your secundary monitors。 Linux 用户:Ctrl+Alt+F8 - 将用户发送到第二个 GUI 终端。在 Ubuntu 中,我按 Ctrl+Alt+F2 返回。以上是关于在 Intellij 中调试时,我可以在返回之前找出返回值吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 intellij 中调试期间有啥方法可以保存变量及其值?