Как исправить проблемы с отладкой Intellij? - PullRequest
6 голосов
/ 10 ноября 2011

Я пытаюсь переключиться на Intellij, но когда я загружаю свои проекты, кажется, что отладчик пропускает строки и не отслеживает фактический источник, когда я пытаюсь пройти.Я знаю, что это неопределенная проблема, но кто-нибудь знает о проблемах, которые заставляют Intellij неправильно ссылаться на исходный код при отладке?

Ответы [ 4 ]

3 голосов
/ 10 ноября 2011

Единственное, о чем я могу думать, это то, что текущие скомпилированные классы не соответствуют исходному тексту, который вы используете для отладки.В этих обстоятельствах происходит то, что IntelliJ (или любая другая IDE) получает от классов отладочную информацию о таких вещах, как номера строк, а затем отображает ее на текущий источник, который вы просматриваете, чтобы показать вам, какой код выполняется.,

Если код устарел, или версии (исходный код и скомпилированный класс) каким-либо образом не совпадают, может случиться так, что отлаживаемый объект предоставляет информацию IDE для отображения определенной строки, но эта информацияНеправильно указывать текущий исходный код, что может привести к появлению отлаженных «скачущих» строк или просто остановке в местах, которые не имеют особого смысла.

Вы перестроили свой проект?Эти источники из классов в Jar, и вы уверены, что версии совпадают?

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

1 голос
/ 03 января 2019

Я боролся с подобной проблемой в проекте на основе Gradle. Я пробовал каждую комбинацию File -> Synchronize, Build -> Clean project, gradle clean build и т. Д. Удалил .gradle кеш. Декомпилировал файл .class, и он выглядел как правильная версия.

В итоге я просто удалил все каталоги build и out в проекте, попробовал снова запустить тест и, наконец, выбрал текущую исходную версию.

Я помню, что в Eclipse мне всегда приходилось иметь дело с Eclipse Dance . Я думаю, что это версия IntelliJ.

ОБНОВЛЕНИЕ: Я обнаружил, что это случайная проблема, поэтому я создал псевдоним для удаления, если вы используете Bash-эквивалент. Просто установите псевдоним в вашем .bashrc или .zshrc и запустите deletebuilds в каталоге вашего проекта:

alias deletebuilds='find . | egrep "\.class$" | sed -e "s/\/build\/.*/\/build\//" | sort | uniq | xargs rm -rf'

Предполагается, что ваши скомпилированные файлы классов попадают в каталог build. Измените часть sed, если они собираются куда-то еще.

0 голосов
/ 18 марта 2019

Эта проблема может быть похожа на эту проблему https://intellij -support.jetbrains.com / hc / en-us / community / posts / 206170749-IDEA-14-1-1-debugger-using-decompiled-code-вместо-source-code .

В Project Structure (Ctrl+Alt+Shift+S) > Modules, если вы добавили jar отлаживаемого модуля к зависимостям любого другого модуля, Intellij может использовать вместо этого декомпилированную версию этого jarпоследней версии исходного кода, поэтому выполнение будет приостановлено на точке останова в декомпилированной версии.Эта проблема может возникнуть, даже если отлаженный модуль вызывается из других модулей, которые не зависят от отлаженного.

Чтобы решить эту проблему, просто удалите jar отлаженного модуля из всех зависимостей модулей в структуре проекта.,Если вы не знаете, в каких модулях в качестве зависимостей есть отлаженный модуль jar, вы можете использовать некоторые инструменты (например, Sublime Text, bash, ...) для поиска имени модуля, которое хранится в файле Intellij *.iml в каждом модуле.,После удаления вам может понадобиться Sync the project и сделать Maven > Reimport.

0 голосов
/ 12 июля 2016

Вы можете настроить IntelliJ на использование Java-компилятора Eclipse, который может решить вашу проблему.Из ссылки ниже:

https://youtrack.jetbrains.com/issue/IDEA-8021

"Это не первый отчет об известной старой проблеме javac: для некоторых структур try / catch и if / else генерируется несколько инструкций байт-кода, которые ошибочно связаны с номерами строк. Поэтому при шаге отладчик встречает инструкцию перехода с другим номером строки и решает остановиться на ней (потому что номер строки изменился). Javac не должен был назначать другой номер строки для этогоинструкция.

Вы видите другое поведение в Eclipse только потому, что он использует свой собственный компилятор, который свободен от этой проблемы. Вы увидите точно такое же поведение, если настроите Eclipse для использования javac для компиляции. Как вариант, вы можетеустановите IDEA для использования компилятора eclipse для обхода проблемы (применимо только к текущей версии EAP - сборка 5xxx - которая имеет интеграцию с компилятором eclipse) "

Также см. этот вопрос относительно настройки Maven для использования компилятора Eclipse:

Использование Eclipse Java Compiler (ecj) в сборках maven

...