Add support for statement-level Stepping#894
Conversation
|
This pull request changes some projects for the first time in this development cycle. An additional commit containing all the necessary changes was pushed to the top of this PR's branch. To obtain these changes (for example if you want to push more changes) either fetch from your fork or apply the git patch. Git patchFurther information are available in Common Build Issues - Missing version increments. |
99a1258 to
dcb5846
Compare
|
Hi @iloveeclipse, could you please check this PR when you get some time ? |
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementStepOverTests.java
Outdated
Show resolved
Hide resolved
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java
Outdated
Show resolved
Hide resolved
iloveeclipse
left a comment
There was a problem hiding this comment.
In general, I find the idea great.
org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/IJavaDebugTarget.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.properties
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
033f264 to
9ab4bbc
Compare
There was a problem hiding this comment.
Pull request overview
Adds a new debugger preference to perform “statement-level stepping”, aiming to avoid suspending on intermediate bytecode instructions within a single logical (often multi-line) source statement.
Changes:
- Adds a new
IJavaDebugTargetflag (setStatementOnlyStepping/isStatementOnlyStepping) and wires it through the UI preference + options propagation. - Updates stepping handling in
JDIThreadto optionally skip intermediate bytecode locations during stepping. - Adds stepping tests and new test programs/snippets to validate multi-line stepping behavior.
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java | Implements the “skip intermediate locations while stepping” behavior in step-event handling |
| org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java | Stores the statement-only stepping flag on the target |
| org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/IJavaDebugTarget.java | Adds new API methods for statement-only stepping flag |
| org.eclipse.jdt.debug/META-INF/MANIFEST.MF | Bumps bundle version to 3.26.0 |
| org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugPreferencePage.java | Adds preference checkbox to UI and persists it |
| org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java | Propagates preference value to active debug targets |
| org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPreferenceInitializer.java | Sets default value for the new preference |
| org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/IJDIPreferencesConstants.java | Adds preference key constant |
| org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.properties | Adds UI label string |
| org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.java | Exposes new message key |
| org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java | Registers the new test suite |
| org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java | Registers new snippet/test program names |
| org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java | New stepping tests for statement-level stepping |
| org.eclipse.jdt.debug.tests/testprograms/StatementStepNested.java | New test program for nested multi-line argument stepping |
| org.eclipse.jdt.debug.tests/testprograms/StatementStepArgumnt.java | New test program for single multi-line argument stepping |
| org.eclipse.jdt.debug.tests/testprograms/StatementStep.java | New test program for many multi-line arguments stepping |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java
Show resolved
Hide resolved
org.eclipse.jdt.debug.tests/testprograms/StatementStepArgumnt.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Show resolved
Hide resolved
9ab4bbc to
88d904d
Compare
iloveeclipse
left a comment
There was a problem hiding this comment.
I haven't tested yet how it works, just did a formal code review.
There are two places where I miss explanation, and few places that should be improved.
For the later, I will push an extra commit on top in a moment, so you can easily see what I've changed.
For the unclear places, please try to make them clear :-)
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java
Outdated
Show resolved
Hide resolved
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
|
Yet another question(s): should the new preference be added to the Debug -> Step Filtering page? The page is currently only for the "Enable step filtering", so probably that would be also a good idea to add the new condition to that group, make it dependent on "enable step filtering" feature and enable both by default? Why should we hide something that is useful? |
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java
Outdated
Show resolved
Hide resolved
Sure, will move this in step filtering section 👍 |
39fb4e2 to
6148616
Compare
|
iloveeclipse
left a comment
There was a problem hiding this comment.
Looks good, just two small changes needed.
I will squash everything now & push, including the small fixes, and merge today.
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
Outdated
Show resolved
Hide resolved
...clipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StatementSteppingTests.java
Show resolved
Hide resolved
Introduce a debug preference to enable statement-level stepping. This allows the debugger to skip intermediate bytecode instructions in multi-line statements and suspend only at the next executable source statement. This avoids unnecessary stops at intermediate load instructions during stepping. Fixes : eclipse-jdt#854 Also-by: Andrey Loskutov <loskutov@gmx.de>
c00413b to
2e2ce2b
Compare
|
Thank you @iloveeclipse for the review, |

This PR Introduces a new debug preference that allows the debugger to skip intermediate bytecode instructions when performing a
SteppingoperationsIn multi-line statements (such as method calls with arguments spread across multiple lines), the debugger may normally suspend multiple times due to intermediate bytecode instructions like variable or constant loads.
With this option enabled, the debugger continues stepping over these intermediate instructions and suspends only at the next executable source statement. This results in a smoother and more intuitive stepping experience, avoiding unnecessary intermediate stops within a single logical statement..
Without enabled :
Before.mp4
With enabled :
After.mp4
Fixes : #854
What it does
How to test
Author checklist