loeschg
loeschg

Reputation: 30581

Debugging in Android Studio... off by a line?

Something has been bothering me for awhile, and I'm wondering if I'm misremembering how things work or if something is wrong with my IDE setup.

Say I have a method

    public void normalDebuggerBehavior(String x) {
(BP)    int y = 12;
        int z = 10;
    }

If I set a breakpoint on the first line of the method (BP), and the debugger stops on that breakpoint, shouldn't I be able to see the value of the passed parameter x without needing to step to the next line (int z = 10) either by right-clicking -> evaluate expression or by adding it to the watchlist? I would think this would be in scope at this point.

If I'm not able to do this, and I'm supposed to be able, what would cause this?

Screenshot: variable not in scope

Stepping to the next line brings vendor into scope. Yes, this is a "fresh" compile.

Upvotes: 4

Views: 2298

Answers (3)

Rhys Davis
Rhys Davis

Reputation: 996

Try turning off your jacoco test coverage off for the debug build in your build.gradle file:

debug {
    ...
    testCoverageEnabled false
}

This completely fixed the issue for me.

Upvotes: 0

laalto
laalto

Reputation: 152867

Debuggers run on bytecode and not on Java source code. The mapping between Java source and bytecode is not always one-to-one.

When you place a breakpoint on the first line of a method, it is placed on the method entry point in the bytecode. The bytecode that actually reads in the method parameters has not been executed yet. You can observe this by looking at the bytecode disassembly and noticing the aload instructions at the beginning of a method with parameters.

Upvotes: 3

degill
degill

Reputation: 1325

I would assume that, since you are not using the argument x (in your example) the compiler gets rid of it, thus the debugger cant "see" it.

I think its a similar thing in your picture. It might be that the compiler optimises some stuff and thus the debugger cant see some variables...

Upvotes: 0

Related Questions