it-roy-ru.com

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

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

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

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

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

[Правка]

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

20
James

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

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

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

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

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

альтернативный текст http://www.SharpDetail.com/p/so_breakpoint.gif

20
Chris Dutrow

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

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


Чтобы связать источник с JUnit, вы можете добавить junit.jar в библиотеки вашего проекта и связать 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">

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

10
VonC

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

2
user1370258

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

1
Steve Pitchers

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

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

1
Thorbjørn Ravn Andersen

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

0
Mashimom