Skip to content

Java remote attach to debug not hitting breakpoints. #755

Description

@jkryanchou

[provide a description of the issue]

Environment
  • Operating System: MacOSX Mojave 10.14.6
  • JDK version: 1.8.0_121
  • Visual Studio Code version: 1.14.1
  • Java extension version: 0.8.1
  • Java Debugger extension version: 0.24.0
Steps To Reproduce
  1. [step 1] Set remote debug configuration

     {
            "type": "java",
            "name": "Debug (Attach) - Remote",
            "request": "attach",
            "hostName": "192.168.1.1",
            "timeout": 30000,
            "port": 8000,
            "projectName": "service"
        },
    
  2. [step 2] Run and Debug remote, and it shows that warning message, and not hitting the breakpoints set below.

    [Warn - 11:25:04 AM] 2020-2-3 11:25:04 [Warn] The debugger and the debuggee are running in different versions of JVMs. You could see wrong source mapping results.
    Debugger JVM version: 1.8.0_121
    Debuggee JVM version: 1.8.0_102

[attach a sample project reproducing the error]
attach logs

Current Result

Not hitting the breakpoints.

Expected Result

Hit the breakpoints and could view the variables.

Additional Informations

I used the IDEA remote attach through the commands, and it works without problem. I wonder if any differences between IDEA and VSCode-java-debug remote attach commands?

  • IDEA Remote debug options
    image

  • VSCode Java Debug remote attach configuration

image

Activity

  1. jkryanchou commented on Feb 3, 2020

    @jkryanchou
    Author

    Anyone could help me out with this issue?

  2. akaroml commented on Feb 7, 2020

    @akaroml
    Member

    JK.Ryan (@jkryanchou), thanks for reaching out.

    The remote capability of VS Code is different from remote debugging in IntelliJ. We would love to help but we are not able to reproduce the issue based on the materials provided in this thread.

    Could you please share the project with us?

  3. jkryanchou commented on Feb 7, 2020

    @jkryanchou
    Author

    The repository was private. Is there any other data I could provide to help me out with this issue?

  4. testforstephen commented on Feb 10, 2020

    @testforstephen
    Contributor

    JK.Ryan (@jkryanchou), could you share the command line arguments to launch your remote service?

  5. jkryanchou commented on Feb 13, 2020

    @jkryanchou
    Author

    Jinbo Wang (@testforstephen) How could I print out the command line arguments which to launch the remote service In VSCode? Or you mean the launch.json configuration?

  6. testforstephen commented on Feb 13, 2020

    @testforstephen
    Contributor

    To debug a remote Java program, it has two steps:
    Step 1: Start the application in debugging mode

    java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=<debug-port> -cp <ClassPath> <ClassName>

    Step 2: Configuration launch.json to attach to the application.

    Currently if you're using attach debugging in VS Code, you must manually launch your service at first. Could you tell me the approach to launch your service?

  7. jkryanchou commented on Feb 14, 2020

    @jkryanchou
    Author

    Jinbo Wang (@testforstephen) Here are the agentlib commandline args:

    java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
    
  8. testforstephen commented on Feb 14, 2020

    @testforstephen
    Contributor

    In the args, suspend=n, this means your application is started not in suspend mode. The application will start execution immediately, and no need to wait for a debugger to connect it. This is why you don't see hitting breakpoints, because your program may have executed the breakpoint code before the debugger ready.

    To solve your program, you need set suspend=y, then the JVM starts in suspended mode and stays suspended until a debugger attaches to it.

  9. jkryanchou commented on Feb 15, 2020

    @jkryanchou
    Author

    Jinbo Wang (@testforstephen) OK, Thanks a lot. I will try it later. If any other issue exists . I would reply on this issue.

  10. jkryanchou commented on Feb 15, 2020

    @jkryanchou
    Author

    Jinbo Wang (@testforstephen) I have changed the suspend=y args. while it works as before and still couldn't hit the breakpoint. I guess it was something wrong with my network to the remote java agent.

  11. lherman-cs commented on Feb 27, 2020

    @lherman-cs

    I'm also having a similar issue

  12. 16 remaining items

  13. JamesIves commented on Apr 7, 2022

    @JamesIves

    I've resolved my issue with 'clean the Javalanguage server workspace' option on VsCode

    I had this exact same problem, and this was the resolution for me too.

  14. tarekahf commented on Feb 1, 2023

    @tarekahf

    I am facing similar problem but with jar file in the class path and the source code in another place outside the main project. See below for details:

    https://stackoverflow.com/q/75304937/4180447

    Any help would be greatly appreciated.

  15. bnheise commented on Dec 13, 2023

    @bnheise

    Having the same problem. None of the solutions mentioned above worked.

  16. tarekahf commented on Dec 13, 2023

    @tarekahf

    The teams are in process to switch over to vscode but when I presented them with this issue they were shocked! Now they are considering staying in Eclipse.

  17. testforstephen commented on Dec 13, 2023

    @testforstephen
    Contributor

    Brian Heise (@bnheise) Tarek (@tarekahf) To help us investigate the problem further, please create a new issue and describe how to reproduce it in detail. It would also be very helpful if you could share a sample project that demonstrates the issue. You can make a similar project with the same structure if your original one is private.

  18. tarekahf commented on Dec 13, 2023

    @tarekahf

    Brian Heise (@bnheise) Tarek (@tarekahf) To help us investigate the problem further, please create a new issue and describe how to reproduce it in detail. It would also be very helpful if you could share a sample project that demonstrates the issue. You can make a similar project with the same structure if your original one is private.

    Jinbo Wang (@testforstephen) it's going to be very hard to provide such details. But as soon as I'm able I'll let you know.

  19. bnheise commented on Dec 13, 2023

    @bnheise

    I'm swamped at work now, but I'll see if I can't put together a minimal example later this week.

  20. bnheise commented on Dec 13, 2023

    @bnheise

    While I'm getting an example together, I will provide some additional context.

    1. We are connecting remotely to a springboot application running inside a docker container
    2. We are configuring the JVM's debug server using GRADLE_OPT environment variable (GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005)
    3. Our launch.json:
    {
          "type": "java",
          "name": "Debug (Attach)",
          "request": "attach",
          "hostName": "localhost",
          "port": 5005,
        }
    1. We are able to connect to the debug server successfully
    2. We are able to pause the execution, and once we do so we can view variables, step in, step out, step foreward, etc
    3. We are able to set breakpoints, but it does not pause when we pass a breakpoint
  21. bnheise commented on Dec 13, 2023

    @bnheise

    One hypothesis: the version of java in the Docker container is java 21. The version of java running configured on JAVA_HOME in the host system is Java8, although Java21 is installed. Is it possible that this could be the cause? If so, is it possible to configure which version of Java the debug console is using? For the sake of other project dependencies in the system, the system JAVA_HOME needs to remain Java8.

  22. testforstephen commented on Dec 13, 2023

    @testforstephen
    Contributor

    Brian Heise (@bnheise) The JDK version does not affect the debugging of your own application code, only the JDK code itself. One factor that could affect the breakpoint is whether the source code version matches the class running in the debuggee JVM. If your local source code differs from the remote one, or if you see an "Unverified Breakpoint" hint on the breakpoint line, the breakpoint is probably not set well.

  23. bnheise commented on Dec 18, 2023

    @bnheise

    Jinbo Wang (@testforstephen) Thanks for the clarification. It is definitely some kind of bug then, because the code does match and the breakpoint is set correctly.

  24. bnheise commented on Dec 18, 2023

    @bnheise

    Hi guys. I have a minimum example. I was able to reproduce the problem without using Docker at all. You can find the repository here.

    Steps to reproduce.

    Clone Repo

    gh repo clone bnheise/java-debugger-breakpoint-failure

    Adjust Settings.json

    I included my settings.json for the project to illustrate my local settings. You may need to adjust to match your local environment. Probably the location of your Java-21 sdk is in a different location than mine so please adjust as necessary.

    {
      "java.configuration.runtimes": [
         {
          "name": "JavaSE-21",
          "path": "~/.local/share/rtx/installs/java/zulu-javafx-21.30.15"
         }
      ],
      "java.import.gradle.java.home": "~/.local/share/rtx/installs/java/zulu-javafx-21.30.15",
      "java.compile.nullAnalysis.mode": "automatic",
    }

    Set GRADLE_OPTS For Debugging

    Note that the exact command below is not tested. I don't use bash so you may need to adjust this. For example, I'm not sure if bash needs the environment variable based as a string or not. Please confirm the proper way to set an environment variable using whatever terminal you use.

    export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005"

    Apply Breakpoints

    Open the file src/main/java/com/example/demo/HelloController.java. It looks as follows:

    package com.example.demo;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
    
      @GetMapping("/")
      public String index() {
        System.out.println("TEST DEBUG");
        System.out.println("TEST DEBUG 2");
        return "Greetings from Spring Boot!";
      }
    
    }

    On Line 11, you'll see System.out.println("TEST DEBUG");. Apply a breakpoint here. If breakpoints are working correctly, then we will expect to see TEST DEBUG output to the console, but not TEST DEBUG 2.

    Start the Application

    ./gradlew bootRun

    As the application boots, confirm that Listening for transport dt_socket at address: 5005 is output to the console.

    Attach Debugger

    A launch configuration called Remote connect is defined in the local launch.json. Using vscode's debug console, launch the remote debugger.

    Confirm that the debugger has connected (you should see the stepper menu appear at the top center of the vscode window.

    Trigger the HelloController Endpoint

    Open http://localhost:8080.

    Observe the console output:

    TEST DEBUG
    TEST DEBUG 2
    

    If you check the debugger in vscode, you will also see that the debugger has not been triggered: the screen has not jumped to the location of the breakpoint, and the stepper options have not been activated.

    System Details

    OS: macOS Sonoma 14.1.2
    VsCode: 1.85.1
    Debugger for Java (vscode plugin): v0.55.0
    JDK: zulu-javafx-21.30.15
    Gradle Version: 8.5
    Springboot Version: 3.2

  25. antonio-petricca commented on Jan 14, 2025

    @antonio-petricca

    I have a Weblogic project which I debug with no problems under IntelliJ.

    With VSCode I am able to break into Jersery controller methods, but not into EJB bean methods!

  26. antonio-petricca commented on Jan 14, 2025

    @antonio-petricca

    I found a workaround:

    1. Put a breakpoint at the method declaration.
    2. Put a breakpoint inside the method.

    The breakpoint will hit inside the method (not at the declaration).

    I don't know, but it works!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions