views:

389

answers:

3

Is there a way to tell the debugger to stop just before returning, on whichever statement exits from the method, be it return, exception, or fall out the bottom? I am inspired by the fact that the Java editor shows me all the places that my method can exit - it highlights them when you click on the return type of the method declaration, (Mark Occurrences enabled).

[eclipse 3.4]

A: 

Good question. Off the top of my head, I'd do this:

public void method(Object stuff) {
    try {
        /* normal code */
    } finally {
        int x = 0;
    }
}

You can set the breakpoint on the x = 0 line, and it will ALWAYS be executed no matter where you return. Even with an exception being thrown, it will be run.

The catch to this is scope. Unless you define variables outside of the try block, you won't be able to see their values where you get to the finally block since they will have exited scope.

Having to just place 5 breakpoints (one for each return statement, whatever) may work best.

I hope there is a better way, I'd love to know it.

MBCook
I love this answer. Even though is requires a code change, it is debugger independent!
Chris Noe
+19  A: 

Put a breakpoint on the line of the method signature. That is where you write

public void myMethod() {

Then right-click on the breakpoint and select "Breakpoint Properties". At the bottom of the pop-up there are two checkboxes: "Method Entry", "Method Exit". Check the latter.

idrosid
thank you! i've been looking for this for a long time too, and had never seen this until today.
John Gardner
Wow. It's so easy.Why did I not know this?
MBCook
Oooooh, I wondered how to do that.
izb
+3  A: 

You can set a method breakpoint.

Double click in the margin next to the method declaration. A breakpoint with an arrow decoration appears. Right-clicking to examine the properties, you can set "Suspend on:" for "Method Entry" and/or "Method Exit".

You can read more about them in the Eclipse Cookbook.

jamesh