Как поставить точку останова в классе без наличия источника?

У меня есть веб-приложение, где мне нужно найти все классы, которые обращаются к объекту запроса 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

Я боюсь, что вам понадобится исходный код, если вы хотите, чтобы это сработало.

Для отладки вам нужны читаемые коды + строки, соответствующие этому коду. Ни один из этих элементов не включен в файлы классов