2013-10-08 2 views
41

Я не могу отлаживать свой код в Intellij IDEA. Когда режим отладки активен и запущен, но контрольные точки не имеют проверенного «v», который представляет собой допустимую и оставленную точку останова.IntelliJ IDEA Debugger не работает над проектом Grails

Посмотрите изображения: http://prntscr.com/1w0owu.

Я действительно ищу в Интернете ответ. Что я должен делать?

+0

Неужели это когда-нибудь работало? У меня были ситуации, когда intellij и grails выходили из синхронизации, поэтому отладка перестала работать, потому что intellij не «понял» этот код. «Grails clean» исправляет это довольно быстро. Какая версия Intellij и Grails? – Gregg

+0

Я использую последнюю версию. Grails 2.3.0 и Intellij 12.1.5. Команда Clean также не работает. Я понял, что папка проекта внутри .grails/2.3.0/projects не была создана. – ricardogobbo

+0

Это случилось со мной, когда я неправильно установил «debug: true» в настройках * компиляции * под «grails.project.fork». – RMorrisey

ответ

72

Я пробовал все упомянутые здесь без успеха. Единственная полезная информация - here.

В сущности, вы должны отключить раздвоенное выполнение, добавив следующее grails-app/conf/BuildConfig.groovy:

grails.project.fork = [ 
    test: false, 
    run: false 
] 

Теперь отладки доступен в IntelliJ IDEA Ultimate Edition v.12.1.6 просто обычной отладка без удаленной отладки. Протестировано на Grails 2.3.1, Java 1.7.0_45, Windows 7 64-бит.

+2

Протестировано на Grails 2.3.4 и IntelliJ 13, а также +1. За работой. –

+2

Протестировано на Grails 2.3.8 и IntelliJ 13.1.3, а также +1 Работа. –

+3

Протестировано на Grails 2.4.0 и IntelliJ 13.1.3 - все работает!Я лично просто прокомментировал строки 'run' и' test', которые были в вышеупомянутой конфигурации конфигурации. –

17

Попробуйте это:

В идее выбрать Изменить конфигурации из списка рядом с кнопкой «Выполнить». Затем добавьте Удаленный, выберите свое имя и оставите настройки удаленной конфигурации по умолчанию. (Порт 5005 и т.д.)

Запустите приложение из консоли с помощью

grails run-app --debug-fork 

В идее, выбрать конфигурацию из списка и нажмите кнопку отладки, когда консоль дисейся информации:

Listening for transport dt_socket at address: 5005 
+0

Это то, что я искал. Ключ был настройкой _new_ ** Remote ** debug config _instead of_, используя конфигурацию отладки, которую IntelliJ автоматически пыталась вставить для моего приложения grails на основе кода моего приложения. Я использовал «grails -debug run-app» для моей консольной команды, а затем запустил новую удаленную конфигурацию в режиме отладки из IntelliJ, и он подключился прямо к моему окну grails. – guyot

1

всего три догадок :

Попробуйте запустить run-app, а не run-war, оба должны работать, но может быть run-war просто не работает.

Или: попробуйте отладки удаленно из консоли:

grails -debug run-app, а затем соединиться с удаленной отладки в Идее.

Или, в крайнем случае: понизить ваш проект до предыдущих версий Grails. Да, это действительно раздражает.

Надеюсь, это поможет.

+0

он должен быть -debug-fork, иначе вы правы – fabiangebert

7

Поскольку Grails 2.3, раздвоенное выполнение для команд несколько Grails (например run-app, test-app) было introduced. Если вы просто отлаживаете приложение Grails от IntelliJ IDEA, процесс GrailsStarter будет запущен с параметрами отладки. Вывод на консоль IDEA будет:

/usr/lib/jvm/default-java/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59935,suspend=y,server=n [...] /opt/idea-IU-133.330/lib/idea_rt.jar org.codehaus.groovy.grails.cli.support.GrailsStarter [...] run-app Connected to the target VM, address: '127.0.0.1:59935', transport: 'socket' 

само приложение будет запускаться в отдельном процессе под названием ForkedTomcatServer. Это где ваш код работает и где ваш отладчик должен действительно подключиться.

Для достижения этой цели, установить debug: true в BuildConfig.groovy в run конфигурации grails.project.fork. Просто запустите Grails теперь от IDEA (не отладки), и вы увидите следующую строку в консоли, когда приложение будет готово обслуживать HTTP запросы:

Listening for transport dt_socket at address: 5005 

Это где вы хотите, чтобы направить отдельную remote run configuration к. Как только ваш удаленный отладчик подключится, вы получите HTTP-запрос и отладка.

Вы также можете отключить раздвоенный выполнение для компиляции/тестирования/Run/военных/консоли Grails команд полностью, установив значение, связанное с записью команд в grails.project.fork к false. Но тогда вы потеряете преимущества для раздвоенного исполнения, добавленного в Grails 2.3.

+1

Спасибо, это заставило меня на правильном пути. Ted Naleid дает хорошее резюме и детализирует плюсы и минусы отключения разветвленного исполнения для отладки с двумя полезными альтернативами: http://naleid.com/blog/2014/11/10/debugging-grails-forked-mode – codehead

1

Я тестировал с последней версией Grails 2.3.4 на Mac Os x Lion.

Тогда я попробовал совет Igors и работает без разветвленного режима.

grails.project.fork = [ 
    test: false, 
    run: false 
] 

Пожалуйста, проверьте подробно grails documentation

если вы хотите отладить раздвоенный режим, который вы должны проверить следующий блог после explainsvery хорошо.

http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

0

Это никогда не должны быть в конфигурации по умолчанию и оставить только на выбор человека. Это страшная боль, чтобы сделать две конфигурации, просто запустите эту вещь в режиме отладки в intellij. Сначала вам нужно настроить или изменить обычную конфигурацию запуска, добавив «--debug-fork» после запуска приложения. Во-вторых, вам нужно настроить удаленное отладки, приняв все значения по умолчанию. Затем вам нужно запустить конфигурацию запуска, и когда она будет запущена, вы запустите конфигурацию отладки. Вот это боль. Я предпочитаю полностью избавляться от бега без разветвленного варианта при разработке. Время - это деньги, и у меня нет времени обезьяне. См. Объяснение г-на Хаки об этом. http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

+0

Я думаю ответ был бы более полезен, если бы вы сначала дали ответ, а затем ваш комментарий о том, почему это раздражает. Возможно, оставив большую часть комментариев. – verdammelt

+0

Нет проблем ... см. Мою отредактированную запись выше: http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/ удачи. –

+0

Вот обновление. У меня, похоже, нет этой проблемы, но если это не так важно для вас, я прокомментировал части файла BuildConfig.groovy в каталоге conf, который занимается разметкой JVM для оптимизации памяти при запуске grails. // раскомментировать (и настроить параметры), чтобы развернуть JVM, чтобы изолировать // пути к классам //grails.project.fork = [ // run: [maxMemory: 1024, minMemory: 64, debug: false, maxPerm: 256 ] //] –

6

Отладка приложения grails (2.3+) может быть выполнена двумя способами.

1. Простое решение: отключение отладки

редактировать BuildConfig.groovy:

grails.project.fork = [ 
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ... 
    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ... 

к

grails.project.fork = [ 
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ... 
    run: false, 

Плюсы:

  • Простой сделать (И получить с вашего развития)

Минусы:

  • Это устраняет возможность выполнять во время выполнения замены кода. Это означает, что если вы измените код, он больше не будет автоматически загружаться, и вам нужно будет перезапустить приложение, чтобы увидеть изменения. Это может занять много времени.

2. Участвуйте решение: отладки раздвоенного выполнения

Это несколько более сложным решением, где присоединить отладчик к приложению погонного Grails. Описано более подробно in this blog post.

После настройки у вас есть дополнительная конфигурация запуска, которая позволяет запускать grails в раздвоенном режиме и еще одну дополнительную конфигурацию прогона, которая позволяет вам отлаживать этот разветвленный режим. Уловка состоит в том, что вам необходимо запустить оба или это не работает.

Плюсы:

  • Вы как отладки и кода во время выполнения замены
  • Это не мешает запуска приложения в обычном режиме. (То есть у вас есть дополнительные опции)

Минусы:

  • Настройка занимает немного времени
  • Запуск в режиме отладки требует более сложный процесс из двух шагов (т.е. это занимает больше времени)

Соображения

Раствор 2 мес в том смысле, что он обеспечивает гибкость. Я лично не очень часто использую debug, поэтому просто начинаем в обычном режиме. Когда я хочу отлаживать, я перезагружаюсь в режиме отладки.

Решение 1 строго лучше, если вам нужно отлаживать и также необходимо перезапустить много. Например, когда вы работаете над вашими классами доменов или настройками базы данных в вашем BootStrap.groovy.

0

заказ this блог о Debugging Grails режиме раздвоенный.

4

Ни один из других ответов не работает для меня на Grails 3.x в 2016 году с Intellij 15.0.4. Это делает работу для меня:

Начало Grails в IntelliJ с этой командой:

run-app --debug-jvm 

Консоль должна вывести: «Прослушивание транспорта транспорт по сокетам по адресу: 5005 Grails приложение работает на http://localhost:8080 в среде: разработка "

Теперь вы можете добавить новую конфигурацию типа« Удаленный »в Intellij. Затем запустите его по умолчанию.

И новое окно консоли отладки должен написать: "Подключено к цели VM, адрес: 'локальный: 5005', транспорт:" гнездо"

Готово.

Для тех, кто заинтересован, ссылки на Grails 3.x документацию для запуска отладочной сервер находится в разделе 2.8, runningAndDebuggingAnApplication:

http://grails.github.io/grails-doc/3.1.x/guide/gettingStarted.html#runningAndDebuggingAnApplication

«Есть несколько способов для выполнения класса Application, если вы используют IDE, тогда вы можете просто щелкнуть правой кнопкой мыши по классу и запустить его непосредственно из своей IDE, которая запустит ваше приложение Grails. Это также полезно для отладки, поскольку вы можете отлаживать непосредственно из среды IDE без необходимости подключения удаленного отладчика, когда используя команду run-app -debug-jvm из командной строки. "

Важное примечание. Когда я попробовал «просто щелкнуть правой кнопкой мыши по классу и запустить его прямо из вашей среды разработки», приложение действительно запустилось. Тем не менее, все запросы, отправленные мне на контроллер, вызвали 500 ошибок с сообщением: «Не удалось разрешить просмотр с именем«/myendpoint »в сервлет с именем« grailsDispatcherServlet ».

Итак, я вернул назад к инструкциям выше.

2

Это очень простой вопрос, с Grails 3 и идеи (2016.1). Там нет необходимости изменять любые файлы больше, как это рекомендовано в других ответах.

по какой-то причине, значок отладки на панели инструментов Idea является greyed out, поэтому вам просто нужно перейти к точке входа приложения (класс, который имеет основной статический метод void, который запускает приложение), щелкните по одной из стрелок запуска в левом желобе и selec t параметр «Отладка».

Из документов JetBrains:

https://www.jetbrains.com/help/idea/2016.1/getting-started-with-grails-3.html

Отладочные Grails 3 Применение

IntelliJ IDEA позволяет отлаживать ваши Grails 3 приложения с помощью Application.groovy.

В окне инструмента Project, откройте каталог инициализации и щелкните правой кнопкой мыши Application.groovy Из раскрывающегося списка выберите Debug Grails: «имя» grails3_debug_app Вы также можете использовать редактор, чтобы начать отладку процесса.

Смежные вопросы