vscode-java-debug
vscode-java-debug copied to clipboard
VSCode doesn't show JDK Java source files when debugging JDK itself
I'm building and debugging the latest version of OpenJDK on Windows 11. I'd like to debug it with VSCode, however I met the following problem:
I made changes in JDK Java sources (say added System.out.println("Hello") in src\jdk.javadoc\share\classes\jdk\javadoc\internal\tool\Main.java) and built JDK using JDK19 as boot JDK. I run my Java test using my freshly built JDK. It successfully starts and prints "Hello". Then I set a breakpoint at the line after my change in VSCode, and run the test under VSCode debugger. It starts, prints "Hello", and stops on my breakpoint, and shows source code, but I can't see my changes, because VSCode loaded jdk.javadoc\jdk.javadoc.internal.tool\Main.class instead of the changed Main.java.
I suppose, the class file was taken from java.configuration.runtimes, but I have no idea how can I force VSCode to load changed sources while debugging. Although VSCode is still able to show and debug my own Java-files, and, moreover, modified native JDK code (C/C++ sources), not Java.
BTW I've got the following pop-up message when debugger starts: "The compiled classes are not compatible with the runtime JDK."
Environment
- Operating System: Windows 11
- JDK version: 19
- Visual Studio Code version: 1.74.3
- Extension pack for Java: 0.25.7
- Java Debugger extension version: 0.47.0
Steps To Reproduce
- Clone openjdk repository (https://github.com/openjdk/jdk.git) and build it
- Make a little change in JDK's Java source file, e.g. add System.out.println("Hello") in src\jdk.javadoc\share\classes\jdk\javadoc\internal\tool\Main.java
- Set a breakpoint at the changed line and try to debug it with VSCode
Current Result
VSCode stops at the breakpoint, loads *.class file, which doesn't contain my changes.
Expected Result
VSCode stops at the breakpoint, loads changed *.java files and shows them in debugger.
Additional Informations
My setting.json:
"java.configuration.runtimes": [
{
"default": true,
"name": "JavaSE-19",
"path": "c:\\work\\jdk19",
}
],
My launch.json:
{
"type": "java",
"name": "(java) Debug",
"request": "launch",
"cwd": "${workspaceFolder}",
"mainClass": "jdk.javadoc.internal.tool.Main",
"javaExec": "${workspaceFolder}\\build\\windows-x86_64-server-fastdebug\\jdk\\bin\\java.exe",
"classPaths": [
"${workspaceFolder}/build/windows-x86_64-server-fastdebug/images/jdk/lib/jrt-fs.jar",
],
},
@wkia Could you try the pre-release version of Java debugger extension? See https://github.com/microsoft/java-debug/pull/463, recently we have optimized the source lookup logic to prioritize searching the project source first, then the libraries.
@testforstephen I've tried v0.47.2023011221 Nothing's changed. With the configuration I provided above, VSCode still shows *.class files without my changes while I'm debugging. If there is any recent version, could you explain how can I try it, please?
I also noted that if I specify source files path in java.configuration.runtimes pointing to my freshly built JDK (see below), VSCode can show my changes, but still loads *.class files, not *.java. This may be a confirmation that the plugin looks for JDK sources from runtime configuration, not workspace. Not sure if it is the solution.
"java.configuration.runtimes": [
{
"default": true,
"name": "JavaSE-19",
"path": "c:\\work\\jdk19",
"sources": "c:\\work\\openjdk\\build\\windows-x86_64-server-fastdebug\\images\\jdk\\lib\\src.zip"
}
],