Как установить точку останова в Eclipse в сторонней библиотеке? - PullRequest
53 голосов
/ 16 декабря 2008

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

Кто-нибудь знает выход из моей проблемы? Конечно, я использую Eclipse в качестве своей IDE.

Обновление: библиотека с открытым исходным кодом.

Ответы [ 6 ]

62 голосов
/ 16 декабря 2008

Вы можете легко установить точки останова метода в сторонних библиотеках, не имея источника. Просто откройте класс (вы получите представление «у меня нет источника»). Откройте схему, щелкните правой кнопкой мыши нужный метод и выберите Toggle Method Breakpoint, чтобы создать точку останова метода.

34 голосов
/ 16 декабря 2008

Самый верный способ сделать это (и в итоге получить что-то действительно полезное) - это загрузить исходный код (вы говорите, что он с открытым исходным кодом) и настроить другой «Java-проект», указывающий на этот источник. .

Для этого скачайте и распакуйте исходный код в вашей системе. Нажмите «Файл» -> «Создать» -> «Проект Java». В следующем диалоговом окне дайте ему имя проекта и выберите «Создать проект из существующего источника». Перейдите в корневой каталог библиотеки с открытым исходным кодом.

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

Вам необходимо удалить jar с открытым исходным кодом из пути сборки вашего проекта и добавить этот новый проект в путь сборки вашего проекта.

Теперь вы можете воспринимать это как свой код и отлаживать по желанию.

Это обходит как минимум пару проблем с другими подходами:

  1. Вы можете «прикрепить источник» к файлу JAR, но если файл JAR был скомпилирован без отладочной информации, это все равно не будет работать. Если файл JAR был скомпилирован с отладочной информацией (lines,source,vars ... см. http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javac.html, и параметр -g).

  2. Вы можете добавить «точку останова исключения», чтобы увидеть, когда вызывается исключение NullPointerException, но это распространенное исключение, и оно вполне может быть вызвано и обработано много (сотни?) Раз до того, как вы находясь в поиске. Кроме того, без исходного кода вы не сможете по-настоящему увидеть что-либо о коде, который вызывает исключение NullPointerException - вероятность того, что вы сможете выяснить, в чем дело, довольно мала.

6 голосов
/ 16 декабря 2008

Вы также можете установить контрольные точки для определенных исключений. С точки зрения отладки есть кнопка «Добавить точку останова Java Exception», и там вы можете добавить «NullPointerException». Ваш отладчик затем приостановит выполнение, как только возникнет такое исключение.

1 голос
/ 12 октября 2015

Чтобы сделать это с помощью материализованного веб-приложения maven, мне пришлось сделать три вещи.

1) Создайте новый проект eclipse с исходным кодом стороннего jar-файла.

2) Удалите ссылку на jar из зависимостей pom.xml.

3) Добавить новый проект eclipse в Deployment Assembly в свойствах проекта.

4) Добавьте новый проект eclipse в свойства проекта -> Путь сборки Java -> Проекты существующего проекта, который ссылается на сторонний проект.

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

1 голос
/ 28 сентября 2012

Просто присоедините источник (или используйте что-то, что автоматически прикрепляет кувшин источника) и затем установите точку останова обычным способом, дважды щелкнув слева от интересующей линии.

1 голос
/ 16 декабря 2008

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

...