Я исследовал различия при запуске приложений Java в Eclipse между «Run» и «Debug». Я использовал Process Explorer от Sysinternals, чтобы увидеть командную строку процесса Java, который Eclipse разветвляет при запуске приложения Java с любой из этих опций. (Я в системе Windows 7)
С «Run HelloWorld»
"C:\Program Files (x86)\Java\jdk1.7.0_07\jre\bin\javaw.exe" -Dfile.encoding=Cp1252 -classpath C:\workspace-juno\HelloWorld\bin com.example.HelloWorld
.......
С помощью «Debug HelloWorld»
"C:\Program Files (x86)\Java\jdk1.7.0_07\jre\bin\javaw.exe" -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2404 -Dfile.encoding=Cp1252 -classpath C:\workspace-juno\HelloWorld\bin com.example.HelloWorld
(Адресный порт изменился в последующих вызовах, например, он стал address=localhost:2564
при следующем вызове.)
Таким образом, java (или javaw) фактически запускается с различными параметрами в зависимости от того, использовались ли «Run» или «Debug»: запуск «Debug» добавляет дополнительную опцию agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:NNNN
. Это стандартный способ перевода JVM в режим отладки. Программа HelloWorld сначала будет ожидать успешного подключения к нему отладчика, прежде чем продолжить (опция suspend=y
). JWM HelloWorld автоматически подключится к некоторому отладчику, работающему по адресу localhost: NNNN (... опция address=localhost:NNNN
и неявная опция по умолчанию server=n
). (... Oracle предоставляет достоверную информацию о agentlib
опциях запуска )
Сам Eclipse будет действовать как приложение отладчика, предоставляя порт NNNN. JWM HelloWorld будет подключаться к этому порту через собственный порт с номером NNNN + 1 (на вкладке TCP / IP этого процесса можно увидеть используемые порты процесса с помощью Process Explorer).