Normally to attach a debuger to a running jvm you would need start the jvm with arguments such as the following:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
Now if I want to debug a process that wasn't started in debug mode, what can I do?
This situation arrises when a production system (i.e. started without debug args) exhibits a 'random' (I use the term loosely) bug. So I can't restart the jvm with the appropriate arguments, because nobody knows how to reproduce the bug again. Is it impossible to attach to the JVM in this situation?
Just to clarify it is not possible to use tools like jdb to attach to already running JVMs unless they were started in debug mode
from the JVM man page
Another way to use jdb is by attaching it to a Java VM that is
already running. A VM that is to be
debugged with jdb must be started with
the following options:
Best Answer
You may be able to use jsadebugd (JDK) to attach a debug server to the process (available on Windows with the Debugging Tools for Windows). It is marked as experimental, so you may want to try it out on a test machine first.
Usage:
The connector name withe arg can be found using
jdb -listconnectors
.