Отладка Eclipse "источник не найден"

Я только начал использовать Eclipse, поэтому легко на меня;). Но при попытке отладки тестового примера JUnit я получаю диалог, в котором говорится, что источник не найден, когда я получаю эту строку в коде в моем методе тестирования:

Assert.assertEquals(1, contents.size());

Я знаю, что я, вероятно, должен пойти и попробовать и скачать источник откуда-то, но я действительно не хочу, потому что я не заинтересован в том, чтобы войти в код JUnit. У меня есть JUnit runtime jar so Почему Eclipse ожидает, что у меня будет весь исходный код ссылок, чтобы отладить мой собственный код (кажется, что-то глупо)?

Мой главный вопрос, однако, как я могу сказать Eclipse пропустить это диалоговое окно, когда источник недоступен, и разрешить мне продолжать отладку моего собственного кода?

[изменить]

Я выделил причину этого. Кажется, что Eclipse, похоже, считает, что ему нужен источник, когда исключение генерируется внутренним кодом JUnit. В общем, так или иначе, чтобы сказать, что это не так, и просто попробуйте вместо этого вызвать диалоговое окно с ошибкой?

Ответ 1

У меня была эта очень раздражающая проблема в течение долгого времени, но я наконец смог ее решить. В моем случае исключительная ситуация с нулевым указателем создавалась где-то в функции Java Transformer.IsRuntimeCode(ProtectionDomain).

Мне действительно не нужно было знать об этом, поскольку исключение было перехвачено и обработано, но затмение каждый раз приостанавливало отладку и сообщало мне, что источник недоступен. В результате мне постоянно приходилось нажимать кнопку, чтобы продолжить выполнение кода.

Чтобы этого не случилось, я:

  1. Кликнул в окне "Точки останова" в нижней части отладки экран
  2. Щелкните правой кнопкой мыши "NullPointerException"
  3. Не отмечен "Пойман"

Это не позволило отладчику приостановить выполнение программы во время перехваченного исключения NullPointerException.

alt text
(источник: SharpDetail.com)

Ответ 2

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

Если вы вернетесь к одной строке в стеке вызовов, вы должны увидеть строку (вашего исходного кода), которая вызвала исключение JUnit.
Этого должно быть достаточно для отладки вашего кода.


Чтобы связать источник с JUnit, вы можете добавить junit.jar в librairies вашего проекта и связать junit-x.y.z-src.jar с junit-x.y.z.jar, так > :

http://web.archive.org/web/20130227201940/http://img241.i_mageshack.us/img241/1412/eclipsejunitsrc.png

Это создаст в .classpath вашего проекта строку типа:

<classpathentry kind="lib" path="junit-x.y.z.jar" sourcepath="junit-x.y.z-src.jar">

Примечание: на самом деле, был бы полный путь к файлам junit[...].jar в этой строке classpathentry. Но вы также можете использовать Связанные ресурсы, чтобы избежать этого фиксированного значения (полный путь) в вашем файле .classpath.

Ответ 3

У меня была аналогичная проблема. Я исправил его, щелкнув правой кнопкой мыши по папке проекта в проводнике пакетов и выбрав обновление. Источник кода не синхронизировался с отладчиком, и это исправило его. Сообщение Transformer.IsRuntimeCode(ProtectionDomain) Source not found больше не появляется.

Ответ 4

Вычислите значение content.size() в отдельной строке или установите контрольную точку для метода.

Также обратите внимание, что представление junit в Eclipse позволяет вам перемещаться по трассе стека.

Ответ 5

Используйте фильтр шагов, чтобы избежать перехода через пакеты... junit.... Щелкните правой кнопкой мыши на трассировке стека и выберите "Пакет фильтров". Возможно, вам придется сначала включить фильтрацию с помощью "Использовать фильтры шагов". ~~~

Ответ 6

У меня была аналогичная проблема с другой банкой, даже когда я указал на источник, она снова попросит об этом. Я смог решить это, скомпилировав банку с debug="on" на ANT.