Remote debugging a Java application

前端 未结 6 1820
我在风中等你
我在风中等你 2020-11-22 07:24

I have a java application running on linux machine. I run the java application using the following:

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socke         


        
相关标签:
6条回答
  • 2020-11-22 07:49

    I'd like to emphasize that order of arguments is important.

    For me java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar command opens debugger port,

    but java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 command doesn't.

    0 讨论(0)
  • 2020-11-22 07:50

    For JDK 1.3 or earlier :

    -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
    

    For JDK 1.4

    -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
    

    For newer JDK :

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
    

    Please change the port number based on your needs.

    From java technotes

    From 5.0 onwards the -agentlib:jdwp option is used to load and specify options to the JDWP agent. For releases prior to 5.0, the -Xdebug and -Xrunjdwp options are used (the 5.0 implementation also supports the -Xdebug and -Xrunjdwp options but the newer -agentlib:jdwp option is preferable as the JDWP agent in 5.0 uses the JVM TI interface to the VM rather than the older JVMDI interface)

    One more thing to note, from JVM Tool interface documentation:

    JVM TI was introduced at JDK 5.0. JVM TI replaces the Java Virtual Machine Profiler Interface (JVMPI) and the Java Virtual Machine Debug Interface (JVMDI) which, as of JDK 6, are no longer provided.

    0 讨论(0)
  • 2020-11-22 07:50

    This is how you should setup Eclipse Debugger for remote debugging:

    Eclipse Settings:

    1.Click the Run Button
    2.Select the Debug Configurations
    3.Select the “Remote Java Application”
    4.New Configuration

    • Name : GatewayPortalProject
    • Project : GatewayPortal-portlet
    • Connection Type: Socket Attach
    • Connection Properties: i) localhost ii) 8787

    For JBoss:

    1.Change the /path/toJboss/jboss-eap-6.1/bin/standalone.conf in your vm as follows: Uncomment the following line by removing the #:

    JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
    

    For Tomcat :

    In catalina.bat file :

    Step 1:

    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
    

    Step 2:

    JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
    

    Step 3: Run Tomcat from command prompt like below:

    catalina.sh jpda start
    

    Then you need to set breakpoints in the Java classes you desire to debug.

    0 讨论(0)
  • 2020-11-22 07:51

    Edit: I noticed that some people are cutting and pasting the invocation here. The answer I originally gave was relevant for the OP only. Here's a more modern invocation style (including using the more conventional port of 8000):

    java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>
    

    Original answer follows.


    Try this:

    java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp
    

    Two points here:

    1. No spaces in the runjdwp option.
    2. Options come before the class name. Any arguments you have after the class name are arguments to your program!
    0 讨论(0)
  • 2020-11-22 08:00

    Steps:

    1. Start your remote java application with debugging options as said in above post.
    2. Configure Eclipse for remote debugging by specifying host and port.
    3. Start remote debugging in Eclipse and wait for connection to succeed.
    4. Setup breakpoint and debug.
    5. If you want to debug from start of application use suspend=y , this will keep remote application suspended until you connect from eclipse.

    See Step by Step guide on Java remote debugging for full details.

    0 讨论(0)
  • 2020-11-22 08:12

    Answer covering Java >= 9:

    For Java 9+, the JVM option needs a slight change by prefixing the address with the IP address of the machine hosting the JVM, or just *:

    -agentlib:jdwp=transport=dt_socket,server=y,address=*:8000,suspend=n
    

    This is due to a change noted in https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435.

    For Java < 9, the port number is enough to connect.

    0 讨论(0)
提交回复
热议问题