Интеллектуальная точка останова не срабатывает при удаленной отладке tomcat - PullRequest
0 голосов
/ 09 марта 2020

Сред:

  • Операционная система: Ma c 10.13.6
  • Java -8
  • Tomcat-7
  • Intellij Community 2019.3
  • Gradle 5.2.1

Выводы командной строки:

$ export GRADLE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=address=5005"
$ ./gradlew myproj-web-java:tomcatRunWar
Listening for transport dt_socket at address: 5005
Starting a Gradle Daemon, 2 incompatible and 2 stopped Daemons could not be reused, use --status for details

Запуск / отладка конфигурации:

Debugger Mode: Attach to remote JVM
Use module classpath: myproj-parent:myproj-web-java:main

Старт отладка и выходы Intellij:

Connected to the target VM, address: 'localhost:5005', transport: 'socket'

Я добавил точку останова в контроллере и зашел на страницу через браузер. Страница отображается правильно, я вижу журнал, выведенный в консоли, но точка останова не достигает.


Если я приостановлю программу в Intellij, я смогу увидеть стек основного потока:

kevent0:-1, KQueueArrayWrapper (sun.nio.ch)
poll:198, KQueueArrayWrapper (sun.nio.ch)
doSelect:117, KQueueSelectorImpl (sun.nio.ch)
lockAndDoSelect:86, SelectorImpl (sun.nio.ch)
select:97, SelectorImpl (sun.nio.ch)
select:101, SelectorImpl (sun.nio.ch)
read:179, SocketConnection$SocketInputStream (org.gradle.internal.remote.internal.inet)
fill:139, Input (com.esotericsoftware.kryo.io)
require:159, Input (com.esotericsoftware.kryo.io)
readInt:308, Input (com.esotericsoftware.kryo.io)
readSmallInt:120, KryoBackedDecoder (org.gradle.internal.serialize.kryo)
read:139, DefaultSerializerRegistry$TaggedTypeSerializer (org.gradle.internal.serialize)
read:36, Serializers$StatefulSerializerAdapter$1 (org.gradle.internal.serialize)
receive:80, SocketConnection (org.gradle.internal.remote.internal.inet)
receive:75, DaemonClientConnection (org.gradle.launcher.daemon.client)
receive:35, DaemonClientConnection (org.gradle.launcher.daemon.client)
monitorBuild:211, DaemonClient (org.gradle.launcher.daemon.client)
executeBuild:179, DaemonClient (org.gradle.launcher.daemon.client)
execute:142, DaemonClient (org.gradle.launcher.daemon.client)
execute:93, DaemonClient (org.gradle.launcher.daemon.client)
run:52, RunBuildAction (org.gradle.launcher.cli)
execute:207, Actions$RunnableActionAdapter (org.gradle.internal)
execute:402, CommandLineActionFactory$ParseAndBuildAction (org.gradle.launcher.cli)
execute:375, CommandLineActionFactory$ParseAndBuildAction (org.gradle.launcher.cli)
execute:37, ExceptionReportingAction (org.gradle.launcher.cli)
execute:23, ExceptionReportingAction (org.gradle.launcher.cli)
execute:368, CommandLineActionFactory$WithLogging (org.gradle.launcher.cli)
execute:298, CommandLineActionFactory$WithLogging (org.gradle.launcher.cli)
doAction:36, Main (org.gradle.launcher)
run:45, EntryPoint (org.gradle.launcher.bootstrap)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
runNoExit:60, ProcessBootstrap (org.gradle.launcher.bootstrap)
run:37, ProcessBootstrap (org.gradle.launcher.bootstrap)
main:23, GradleMain (org.gradle.launcher)

В основном потоке или других темах нет моего кода. Однако, если я проверяю список процессов, кажется, что для tomcat нет отдельного процесса jvm.

И когда программа находится в режиме паузы, я все равно могу посетить страницу, пока вывод в консоли приостановлен.

1 Ответ

2 голосов
/ 09 марта 2020

Если GRADL_OPTS установлено как таковое, вы запускаете процесс отладки для самого демона Gradle , а не для разветвленного Java процесса, на котором фактически работает сервер Tomcat.

Вы можете использовать Настройка Gradle Run / Debug для запуска сервера Tomcat, где вы указываете параметры JVM для разветвленного процесса :

enter image description here

Скриншот взят из этой статьи: Отладка веб-приложения spring- mvc с помощью плагина gradle-tomcat-plugin и IntelliJ IDEA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...