У меня есть веб-приложение, где мне нужно найти все классы, которые обращаются к объекту запроса http (потому что один из них вызывает затруднительную ошибку). Поэтому я хотел бы поставить точку останова в некоторых методах реализации ServletRequest. Однако эта реализация предоставляется Weblogic, для которой у меня нет источников. Как поставить точку останова в классе в любом месте определенного метода, не имея его источника. Eclipse IDE является предпочтительным.
Как поставить точку останова в классе без наличия источника?
Ответ 1
Вы можете установить точку останова метода, используя представление схемы рассматриваемого класса. Затем отладчик разбивается на первую строку метода.
Ответ 2
В зависимости от вашей удачи вы можете сделать это с помощью декомпилятора. Вам нужно будет разместить точку останова в соответствующей строке (которая, увы, может не содержать "прерывистый" код)
Лучший способ сделать это - создать обертку ServletResponse
. Кстати, вчера я создал такую вещь (с несколько иной целью), так вот вот:
public class DebugFilter implements Filter {
public void init(FilterConfig filterConfig) {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request,
new ResponseWrapper((HttpServletResponse) response));
}
public void destroy() {}
}
class ResponseWrapper extends HttpServletResponseWrapper {
public ResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public PrintWriter getWriter() throws IOException {
return super.getWriter(); // breakpoint here
}
// Override whichever methods you like
}
Ответ 3
Я боюсь, что вам понадобится исходный код, если вы хотите, чтобы это сработало.
Для отладки вам нужны читаемые коды + строки, соответствующие этому коду. Ни один из этих элементов не включен в файлы классов