Подтвердить что ты не робот

Как установить контрольную точку в Eclipse в сторонней библиотеке?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

Вы можете легко установить контрольные точки метода в сторонних библиотеках без источника. Просто откройте класс (вы получите представление "i-have-no-source" ). Откройте схему, щелкните правой кнопкой мыши нужный метод и нажмите Toggle Method Breakpoint, чтобы создать контрольную точку метода.

Ответ 3

Вы также можете установить контрольные точки для определенных исключений. С точки зрения Debug есть кнопка "Добавить точку исключения исключений Java", и там вы можете добавить "NullPointerException". После этого отладчик приостанавливает выполнение, как только возникает такое исключение.

Ответ 4

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

Ответ 5

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

Ответ 6

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

1) Создайте новый проект eclipse с исходным кодом сторонней банки.

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

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

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

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