开发者

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.


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.


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
}


I'm afraid you will need the source code if you want this to work.

For debugging, you need readable code + line numbers that match this code. None of these items are included in the class files

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜