Java 5, 6, 7 and newer
The Java™ Platform Debugger Architecture (JPDA) supports certain JVM invocation options.
Usually this boils down to:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y
This will cause your JVM process to execute but wait (suspend=y) and listen for a socket connection from a remote debugging client on a free port (which it will write to stdout. The suspend=y option is especially useful if you need to debug code that runs during the start-up phase of your application.
If you don’t want the process to do the initial waiting, then use suspend=n.
Java 1.4
If you are for some terrible reason stuck on Java 1.4, then you must use the older approach like this:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n
Tomcat
To enabled remote debugging for a Apache Tomcat on Windows, create bin\setenv.bat in your Tomcat installation, with this content:
set "CATALINA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n"
Network port
If you use the settings above, i.e. server=y and no “address” option, JPDA will pick a free port and write a message about this to stdout. Look for something like this:
Listening for transport dt_socket at address: [PORT]
Intellij configuration
Add a debug configuration via Run menu: