【问题标题】:How to put breakpoint in class without having it's source?如何在没有源代码的情况下在课堂上放置断点?
【发布时间】:2011-03-28 19:29:50
【问题描述】:

我有一个 Web 应用程序,我需要在其中找到所有访问 http 请求对象的类(因为其中一个会导致难以找到错误)。因此,我想在 ServletRequest 实现的一些方法中设置断点。然而,这个实现是由我没有来源的 Weblogic 提供的。如何在没有 source 的情况下在特定方法中的任何位置放置断点。首选 Eclipse IDE。

【问题讨论】:

    标签: java eclipse debugging


    【解决方案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
    }
    

    【讨论】:

    • 包装器方法的问题是我的应用程序中已经有包装器,但是某些框架以某种方式直接对原始请求进行操作 - 这就是错误:-)。
    【解决方案2】:

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

    【讨论】:

    • 由于某种原因,该方法的右键菜单在新工作区中不包含“切换方法断点”,但在设置另一个断点后显示。
    • 非常感谢你的这个。我一直盲目地从我实际拥有源代码的代码开始进入每个方法调用,现在它可以在瞬间运行?
    【解决方案3】:

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

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

    【讨论】:

    • 幸运的是,这不是真的。请参阅 Thorbjørn Ravn Andersen 的答案!
    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 2023-03-26
    • 2018-01-09
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多