3

У меня возникли трудности при попытке отладки кода в grails. Трудно помещать в текст, поэтому я опубликовал скринкаст, показывающий, что проблема here. Короче говоря, пока я отлаживаю отладчик, он начинает прыгать с места на место и не следовать логике программы, которую я имею. Единственный другой подобный вопрос, который я нашел, - год, не имел решения, и его можно найти here.Отладчик Groovy не синхронизирован

Лучшая догадка, которую я до сих пор имею в виду, заключается в том, что отладчик отображает текст, который я набрал, но на самом деле выполняет старую версию файла класса, который он где-то кэшировал. Поэтому я попробовал:

  • очистка проект
  • вручную удалить все файлы классы из целевой папки и от целевого затмения папки
  • Поиска всего моего жесткого диска для дополнительных файлов с похожими названиями
  • удаление мой проект из рабочей области и повторно добавлять его
  • закрытия и повторного открытия IDE
  • Grails обновить-зависимостей
  • Импорт проекта в новую IDE (я использовал GGTS, я переключился на IntelliJ)

Ни одно из этих решений не имело никакого эффекта. Я понял, что проблема была в файле .groovy, и я писал почти чистую Java, поэтому я удалил файл .groovy и повторно создал класс в файле .java. Это решило мою проблему. К сожалению, у меня снова возникла проблема, и на этот раз именно в контроллере в значительной степени зависит от структуры Grails, поэтому решение не является вариантом. Помимо того, что он также находится в файле .groovy, другое сходство заключается в том, что код разбивается на оператор if.

Мои следующие шаги:

  • Убедитесь, что приложение не выполняет код, который я вижу, используя функции печати для контроля фактического потока выполнения.
  • Закомментируйте всю функцию и добавьте функциональность по одной строке за раз, чтобы увидеть, могу ли я увидеть, что ее нарушает.
  • Удалите файл .groovy и заново создайте его как другой файл .groovy.

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

+0

Обновление: Я проверял, что выполняемый код не совпадает с кодом, который показывается для выполнения. Подробности here. В частности, места, где отладчик останавливается в конце блоков кода, просто иллюзия. На данный момент я работаю над этим, игнорируя аномальные прыжки в отладчике. Мне удалось достаточно хорошо кодировать этот код, но он далеко не идеален. – benjaminjsanders

+0

Обновление: я заметил еще одну, предположительно связанную с выпуском Grails Debugger. Я пытался решить проблему, добавив переменную, а затем распечатав ее значение в разных точках выполнения программы. Я обнаружил, что когда я очищал и перекомпилировал программу, строка, объявляющая переменную, не выполнялась, но строка, вызывающая переменную для печати ее значения, выполнялась. Ясно, что это исключило исключение, поскольку отладчик считал, что переменная не была объявлена. – benjaminjsanders

+0

Я попытался решить все вышеперечисленные проблемы, обновив от grails 1.3.7 до grails 2.2.0. Обновление было неудачным, и приложение на данный момент довольно мало, поэтому я создал новый проект в grails 2.2.0, создал пустые классы с правильными именами, а затем вставил в логику из моего старого кода. Эффект состоял в том, чтобы уничтожить все ранее существовавшие области проблем и ошибки отладчика, но тогда одна и та же проблема возникала и в новом проекте, только в разных местах кода. – benjaminjsanders

ответ

1

Смотрите мой комментарий к jira issue that you raised. Вы обнаружили проблему с компилятором groovy и тем, как он вычисляет номера строк. Это не проблема с выполнением неправильных файлов классов или с использованием разбитого отладчика. Отладчик делает именно то, что ожидается. Это компилятор, который предоставляет ошибочную информацию о номере линии.

Следующий шаг, как описано в выпуске, заключается в предоставлении простого проекта, который воссоздает ошибку. Я пытался сделать это сам, но не мог. Поэтому, пожалуйста, поставьте что-то, с чем мы можем работать. Затем мы можем уведомить команду компилятора groovy.