2010-08-12 52 views
11

我有一个web应用程序,我需要找到访问http请求对象的所有类(因为其中一个导致很难发现错误)。因此,我想在ServletRequest实现的一些方法中加入断点。然而,这个实现是由Weblogic提供的,我没有源代码。我怎样才能在某个特定方法的某个类中放置一个断点而不需要它的源代码。 Eclipse IDE是首选。如何将断点放在课堂上,而不是源代码?

回答

17

您可以使用相关类的大纲视图来设置方法断点。然后调试器在该方法的第一行中断。

+0

很酷,我不知道:) +1 – Bozho 2010-08-12 08:39:41

+1

由于某种原因,该方法的右键单击菜单不包含新工作区上的“切换方法断点”,但在设置另一个断点后显示。 – 2013-05-06 11:53:40

0

恐怕如果你想让它工作,你需要源代码。

对于调试,您需要与此代码匹配的可读代码+行号。 这些项目都不包含在类文件中

+0

幸运的是,这是不正确的。请参阅ThorbjørnRavn Andersen的回答! – vol 2012-07-03 21:38:24

1

根据你的运气,你可以用a decompiler做到这一点。您必须将断点放在适当的行中(唉,可能不包含“可断点”代码)

更好的方法是创建一个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 
} 
+0

包装方法的问题是,我已经在我的应用程序中有包装,但某些框架以某种方式直接对原始请求进行操作 - 这就是错误:-)。 – 2010-08-12 09:06:24