ChatGPT解决这个技术问题 Extra ChatGPT

Can I find out the return value before returning while debugging in Intellij?

With:

Object method(){
    ...
    return /* some complex expression */
}

Is there a way I can see what value will be returned while debugging? Like somehow set a breakpoint that would be hit right after the return, but before execution goes to the calling code? I'd like to be able to know what the return value is and also be able to see what values of all of the local variables are.

The way I do it now is by making a temporary variable: Object ret = /* something complex */; return ret;. But thats a hassle and also adds an extra unnecessary line of code.

Note: This is the same question as Can I find out the return value before returning while debugging in Visual Studio, but for intellij.

Please re-read the answers. Since at least 2016.3, there is a much better way. See answer from @Birchlabs for details. It should now be the accepted answer.
Agreed, birchlabs answer is exactly what's asked for. Helped me out a lot, wonderful!

B
Birchlabs

On IntelliJ IDEA 2016.3: it's hidden inside the cog button of the debug panel. Ensure Show Method Return Values is checked.

https://i.stack.imgur.com/5ei7C.png

Use the debugger to break somewhere inside the function whose return value you'd like to see.

https://i.stack.imgur.com/8vLIg.png

Step out of the function (or step over until you escape):

https://i.stack.imgur.com/83Fvi.png

Observe that the return value appears in your variables:

https://i.stack.imgur.com/2qafi.png


Great! Any chance we could also make conditional breakpoints work with this? The use-case is to stop before function returns depending on its return value.
C
CrazyCoder

There is Watch method return values button available in the debugger panel.

Watch method return values: Click this button to watch return values of the last executed method.

https://i.stack.imgur.com/wH2F5.png

IDEA 12 configuration:

https://i.stack.imgur.com/6Nm3c.png


Nothing seems to show up in either the "Variables" or the "Watches" tabs. I am using Groovy if that matters. Also, this seems like it will show the return value of the last method executed from the context of the calling code, rather than from the context of the method itself. The important difference of this is that if you can see it from the context of the method itself, you can also look at the values of the local variables of the method. This could allow you to see what went wrong if the method is returning an incorrect value.
It shows the return value in the "Variables" pane (using fully qualified method name). This should have been the accepted answer. @CrazyCoder +1 from me :-)
@CrazyCoder: Does this feature still exist for IDEA 13? I cannot find it.
I'm on Intellij 15 and don't see this as well. Can you post a screenshot?
in Jan 2017 (Idea 2016.3.2): you have to click on the Settings icon (the gear, right above the yellow menu item on the 2nd image), an a menu shows that includes "Show Method Return Values". No need to restart anything: after the next return from a method, its ObjectClassName.methodName() appears in the Variables view right below this.
j
jluzwick

There seems to be a couple ways you can do this. The first one involves setting up the breakpoint on the method signature, in your case you would setup a breakpoint on Object method(){ . This will allow you to watch for the entrance and exit of the method. I believe you have to use this in conjunction with "Watch method return values" like stated above, but I haven't been able to completely test this as it takes too long to compute. Beware, this does dramatically decrease the performance of the debugger and it will take longer to debug.

Also you can do the following manually.

Setup the breakpoint on the return line. When the return line is hit, click on the return line, specifically put the cursor on the operation that you want to see, then go to Run->Evaluate Expression (or Alt-F8) and it should run the expression at that point and return what it's returning.

Note: If you create a breakpoint, there are a lot of things you can tell IDEA to do with them, such as if you break on a breakpoint, you can tell them to perform an expression and log it. You can look around with what you can do if you right-click on a breakpoint and click properties.

UPDATE: Try this in conjunction with the first way of doing it. Don't use "Watch method return values" as it seems to slow down or freeze up the debugging session. Instead do the following

Right-click on the return expression you want to see and click "Add to Watches" Next add a method breakpoint like stated above. Debug your program and your method will break on the method signature. Hit the F9 key for continue and it should break again AFTER the return expression has been computed and your return expression should be in the watch column.

Remember that method breakpoints are slower so it might take more time, a tricky way to improve this if you are noticing too much of a performance hit is by just setting the return statement breakpoint (without having a method breakpoint) and then adding the method breakpoint AFTER the return statement breakpoint hits and then continuing.

Hope this helps,


Actually, once you have added a breakpoint and a watch to (new X()), then you can simply do Alt+F8 on that watch to 'analyze' the returned object. This is really useful.
If I'm understanding this correctly, the proposed solution here only works if the expression has no side effects. I definitely don't recommend putting complicated expressions in the variables/watch window in general.
Since at least 2016.3, there is a much better way. See answer from Birchlabs for details. It should now be the accepted answer.
u
unlimitednzt

This was asked a while ago, but I use a different method when I want to handle this situation.

When debugging, you can mark the expression (in your case, the expression right after the "return") and hit CTRL + ALT + F8 (Quick Evaluate Expression). IntelliJ will pop up a little window showing you the value that will be returned.


If you use an Intel graphic chip this keyboard shortcut will shut down your secundary monitors.
Linux users: Ctrl+Alt+F8 - Will send user to the 2nd GUI Terminal. In Ubuntu I pressed Ctrl+Alt+F2 to return back.

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now