microsoft / microsoft/vscode-java-debug
Debugger opens *.class file despite there being an overridden *.java file in the project's src folder
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 591
- Forks
- 429
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 19
Description
When debugging a project where I have put copies of Java files from a dependency in my project's src folder (but in another module) to adjust its behavior, and placing break points in these overwritten Java files, the debugger always opens the *.class file of the dependency, which does not contain my changes.
Example project which works: https://github.com/marecabo/java-debug-demo/tree/works
Example project where this issue occurs: https://github.com/marecabo/java-debug-demo/tree/does-not-work
Environment
- Operating System:
RHEL 8.9 - JDK version:
openjdk 21.0.2 2024-01-16 LTS - Visual Studio Code version:
1.88.1 - Java extension version:
v1.29.0 - Java Debugger extension version:
v0.57.0
Steps To Reproduce
- Checkout example project:
git clone -b does-not-work https://github.com/marecabo/java-debug-demo.git - Place a breakpoint in
other/src/main/java/tech/tablesaw/table/Relation.java:261.
This file overrides a file from a dependency and changes its behavior, see https://github.com/marecabo/java-debug-demo/commit/40bb99b2a213d8f93fe56e77a961562c2be7ac8f
- Debug
run/src/main/java/com/project/my/run/Main.java
Current Result
Relation.class is opened which obviously does not show the changes I made in Relation.java. The execution marker (yellow highligted line) is - however - at the line number of the original breakpoint in other/src/main/java/tech/tablesaw/table/Relation.java:261, even if that line in Relation.class only contains } or is even empty.
Expected Result
other/src/main/java/tech/tablesaw/table/Relation.java is opened with my changes.
Additional Informations
So far I found out, that this issue only occurs, when the overridden Java file is not located in the same maven module, where the main class which is debugged resides. As a workaround, moving the overridden Relation.java file to the run module is enough to make it work as expected.
Thanks for your work at this extension.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Clone the linked java-debug-demo repository on the does-not-work branch and reproduce the breakpoint in other/src/main/java/tech/tablesaw/table/Relation.java while debugging run/src/main/java/com/project/my/run/Main.java. Compare this with the works branch and inspect the attached language-support-for-java.log. Done means the debugger opens Relation.java from the other module with the user's changes instead of the dependency's Relation.class.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, typescript
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100