-
Enhancement
-
Resolution: Fixed
-
P4
-
14
The Xdebug (and its alias -debug) launcher flag does nothing and is documented as existing "for backwards compatibility". The history is rather complex but fortunately it is summarized in JDK-6272174:
-------------------------------------------------------------------------------------
History, to the best of my memory --
(1) Long ago and far away
-Xdebug used to mean use JVMDI
-Djava.compiler=whatever was how you could specify a JIT compiler to run in the Classic VM
-Djava.compiler=NONE was the Classic VM way of forcing interpreted execution and had to be used with -Xdebug because JVMDI ran in the interpreter
(2) HotSpot came along
-Djava.compiler=whatever was meaningless and ignored, but,
-Djava.compiler=NONE presumably so that the "-Xdebug -Djava.compiler=NONE" command line worked, was made the same as -Xint
(3) Then full-speed debugging came along
Everybody's command line was still launching the debugee with "-Xdebug -Djava.compiler=NONE", so a horrible hack was added out of cautiousness:
-Djava.compiler=NONE was left equal the same as -Xint, but was ignored if combined with -Xdebug *gag*
Worse, I think this was me
(4) Then JVM TI came along (JDK5)
-Xdebug now meant set up the internal JVMDI emulating JVM TI environment enabling all the JVMDI events, like breakpoint.
There wasn't a JVMDI flag anymore, so the full-speed hack (3) was changed to check for breakpoints being enabled
(5) Then JVMDI was removed (JDK6)
-Xdebug is now just ignored
So, -Xdebug won't enable breakpoints.
---
So Xdebug has done nothing since JDK 6, but unfortunately continues to be referred to in relation to JDWP! This occurs in our own JDWP usage information:
> java -Xrunjdwp:help
Java Debugger JDWP Agent Library
--------------------------------
...
Warnings
--------
- The older -Xrunjdwp interface can still be used, but will be removed in
a future release, for example:
java -Xdebug -Xrunjdwp:[help]|[<option>=<value>, ...]
---
This then makes its way into other web documents e.g.
---
To run a regular serverless Java class Test with debugging enabled in the Oracle HotSpot JVM, you need to use the following command:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y Test
As you can see, you basically need only two JVM options: -Xdebug and -Xrunjdwp. Note that these are X-arguments, which means that they are not standardized and may not work as expected in other JVM implementations.
The -Xdebug argument enables the debugging itself, and the -Xrunjdwp argument configures the JDWP protocol with several important parameters. [1]
---
[1] https://stackify.com/java-remote-debugging/ (December 2017)
So I propose that we officially deprecate -Xdebug/-debug in 14 so that we can remove it in 15.
There are obviously multiple pieces to this and we need to update the JDWP usage information independent of this.
-------------------------------------------------------------------------------------
History, to the best of my memory --
(1) Long ago and far away
-Xdebug used to mean use JVMDI
-Djava.compiler=whatever was how you could specify a JIT compiler to run in the Classic VM
-Djava.compiler=NONE was the Classic VM way of forcing interpreted execution and had to be used with -Xdebug because JVMDI ran in the interpreter
(2) HotSpot came along
-Djava.compiler=whatever was meaningless and ignored, but,
-Djava.compiler=NONE presumably so that the "-Xdebug -Djava.compiler=NONE" command line worked, was made the same as -Xint
(3) Then full-speed debugging came along
Everybody's command line was still launching the debugee with "-Xdebug -Djava.compiler=NONE", so a horrible hack was added out of cautiousness:
-Djava.compiler=NONE was left equal the same as -Xint, but was ignored if combined with -Xdebug *gag*
Worse, I think this was me
(4) Then JVM TI came along (JDK5)
-Xdebug now meant set up the internal JVMDI emulating JVM TI environment enabling all the JVMDI events, like breakpoint.
There wasn't a JVMDI flag anymore, so the full-speed hack (3) was changed to check for breakpoints being enabled
(5) Then JVMDI was removed (JDK6)
-Xdebug is now just ignored
So, -Xdebug won't enable breakpoints.
---
So Xdebug has done nothing since JDK 6, but unfortunately continues to be referred to in relation to JDWP! This occurs in our own JDWP usage information:
> java -Xrunjdwp:help
Java Debugger JDWP Agent Library
--------------------------------
...
Warnings
--------
- The older -Xrunjdwp interface can still be used, but will be removed in
a future release, for example:
java -Xdebug -Xrunjdwp:[help]|[<option>=<value>, ...]
---
This then makes its way into other web documents e.g.
---
To run a regular serverless Java class Test with debugging enabled in the Oracle HotSpot JVM, you need to use the following command:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y Test
As you can see, you basically need only two JVM options: -Xdebug and -Xrunjdwp. Note that these are X-arguments, which means that they are not standardized and may not work as expected in other JVM implementations.
The -Xdebug argument enables the debugging itself, and the -Xrunjdwp argument configures the JDWP protocol with several important parameters. [1]
---
[1] https://stackify.com/java-remote-debugging/ (December 2017)
So I propose that we officially deprecate -Xdebug/-debug in 14 so that we can remove it in 15.
There are obviously multiple pieces to this and we need to update the JDWP usage information independent of this.
- csr for
-
JDK-8312220 Deprecate the launcher -Xdebug/-debug flags that have not done anything since Java 6
- Closed
- duplicates
-
JDK-8312151 Deprecate for removal the -Xdebug option
- Closed
- relates to
-
JDK-8312916 Remove remaining usages of -Xdebug from test/hotspot/jtreg
- Resolved
-
JDK-8227231 JDWP help information shows use of obsolete Xdebug flag
- Resolved
-
JDK-6272174 -Djava.compiler=NONE and -Xdebug anachronisms unanachronistically disable full-speed debugging
- Closed
(2 links to)