2010-08-12 2 views
11

http 요청 객체에 액세스하는 모든 클래스를 찾아야하는 웹 응용 프로그램이 있습니다. 그 중 하나가 버그를 찾기가 어렵 기 때문입니다. 따라서 ServletRequest 구현 방법 중 일부에 중단 점을 넣고 싶습니다. 그러나이 구현은 소스가없는 Weblogic에서 제공합니다. 특정 메소드의 어디에서든 클래스에 중단 점을 넣을 수 있습니다. Eclipse IDE가 더 좋습니다.소스가 없어도 클래스에 중단 점을 넣는 방법은 무엇입니까?

답변

17

해당 클래스의 개요보기를 사용하여 메서드 중단 점을 설정할 수 있습니다. 그런 다음 디버거가 메서드의 첫 번째 줄에서 중단됩니다.

+0

cool, 나도 몰랐다 :) +1 – Bozho

+1

어떤 이유로 인해 메서드의 오른쪽 클릭 메뉴에 "Toggle Method Breakpoint"가 새 작업 영역에 포함되어 있지 않지만 다른 중단 점이 설정된 후에 표시됩니다. –

0

이 기능을 사용하려면 소스 코드가 필요합니다.

디버깅의 경우이 코드와 일치하는 읽을 수있는 코드 + 줄 번호가 필요합니다. 이러한 항목은 클래스 파일에 포함되어 있지 않습니다.

+0

다행히도 이것은 사실이 아닙니다. Thorbjørn Ravn Andersen의 대답을보십시오! – vol

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

래퍼 접근법의 문제점은 이미 애플리케이션에서 래퍼가 있지만 일부 프레임 워크가 어떻게 든 원래 요청에서 직접 작동한다는 것입니다. 이는 버그입니다. –

관련 문제