Я пытаюсь переключиться на Intellij, но когда я загружаю свои проекты, отладчик, кажется, пропускает строки и не отслеживает фактический источник, когда я пытаюсь пройти. Я знаю, что это расплывчатая проблема, но кто-нибудь знает о проблемах, из-за которых Intellij неправильно связывает исходный код при отладке?
Как исправить проблемы с отладкой Intellij?
- Не видел такого поведения; Вы пробовали полную очистку и восстановление? 10.11.2011
- вы отслеживаете свой собственный источник или источники какой-то библиотеки? проблема может заключаться в нескольких версиях одной и той же библиотеки в пути к классам 10.11.2011
- Подтвердили ли вы, что на самом деле это не ссылка на правильный источник, или это ссылка, но пропуск определенного кода, который вы пытаетесь отладить? Я спрашиваю, поскольку я испытал то же самое из-за того, что intellij не вошел в лямбда-функции. Некоторый рефакторинг кода упростил пошаговое выполнение. Однако, если вы не видите каких-либо отраженных изменений, не стесняйтесь игнорировать этот комментарий. 06.10.2019
Ответы:
Единственное, о чем я могу думать, это то, что текущие скомпилированные классы не соответствуют исходному коду, который вы используете для отладки. Что происходит в этих обстоятельствах, так это то, что IntelliJ (или любая другая IDE) получает отладочную информацию от классов, касающуюся таких вещей, как номера строк, а затем сопоставляет ее с текущим источником, который вы просматриваете, чтобы показать вам, какой код выполняется. .
Если код устарел или версии (исходный код и скомпилированный класс) каким-либо образом не совпадают, может случиться так, что отлаживаемый код предоставляет IDE информацию для отображения определенной строки, но эта информация неверна, предоставляя текущий источник кода, что может привести к отлаженным "прыгающим" строкам или просто остановке в местах, которые не имеют особого смысла.
Вы переделали свой проект? Являются ли эти источники из классов в банке, и вы уверены, что версии совпадают?
Надеюсь, поможет!
Я получил ту же проблему. Вы можете выполнить следующие шаги:
- Удалить папку сборки/цели
- Закрыть проект из файла и
- Откройте проект из последних проектов.
- Отладить снова. Теперь отладчик попадет в ваше местоположение указателя отладки
Спасибо :)
Я боролся с аналогичной проблемой с проектом на основе 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
, если они собираются куда-то еще.
Вы можете настроить 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:
Использование компилятора Java Eclipse (ecj) в сборках maven
Эта проблема может быть похожа на эту проблему https://intellij-support.jetbrains.com/hc/en-us/community/posts/206170749-IDEA-14-1-1-debugger-using-decompiled-кодвместоисходногокода.
В Project Structure (Ctrl+Alt+Shift+S) > Modules
, если вы добавили какой-либо jar отлаживаемого модуля в зависимости любого другого модуля, Intellij может использовать декомпилированную версию этого jar вместо последнего исходного кода, поэтому вместо этого выполнение будет приостановлено в точке останова в декомпилированной версии. Эта проблема может возникнуть, даже если отлаживаемый модуль вызывается из других модулей, не зависящих от отлаживаемого.
Чтобы решить эту проблему, просто удалите jar отлаживаемого модуля из зависимостей всех модулей в структуре проекта. Если вы не знаете, какие модули имеют отлаживаемый jar-модуль в качестве зависимостей, вы можете использовать некоторые инструменты (например, Sublime Text, bash,...) для поиска имени модуля, которое хранится в файле Intellij *.iml
в каждом модуле. После удаления вам может понадобиться Sync the project
и сделать Maven > Reimport
.