Details
-
Enhancement
-
Resolution: Fixed
-
P4
-
14
Description
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.
Attachments
Issue Links
- 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
- Resolved
- 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)