Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to put breakpoint in class without having it's source?

I have a web application where I need to find all classes that accesses the http request object (because one of them is causing a hard to find bug). Therefore I would like to put breakpoint in some of the methods of ServletRequest implementation. This implementation is however provided by Weblogic for which I don't have sources. How can I put a breakpoint in a class anywhere in a particular method without having it's source . The Eclipse IDE is preferred.

like image 963
calavera.info Avatar asked Aug 12 '10 08:08

calavera.info


2 Answers

You can set a method breakpoint using the outline view of the class in question. Then the debugger breaks at the first line of the method.

like image 71
Thorbjørn Ravn Andersen Avatar answered Oct 16 '22 04:10

Thorbjørn Ravn Andersen


Depending on your luck, you can do this with a decompiler. You'll have to place the breakpoint in the appropriate line (which, alas, might not contain "breakpointable" code)

The better way to do this is to create a ServletResponse wrapper. Incidentally, yesterday I created such a thing (with a slightly different purpose), so here it is:

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
}
like image 36
Bozho Avatar answered Oct 16 '22 04:10

Bozho