2010-08-12 15 views
11

Tengo una aplicación web donde necesito encontrar todas las clases que acceden al objeto de solicitud http (porque una de ellas está causando un error difícil de encontrar). Por lo tanto, me gustaría poner punto de corte en algunos de los métodos de implementación de ServletRequest. Sin embargo, Weblogic proporciona esta implementación para la cual no tengo fuentes. ¿Cómo puedo poner un punto de interrupción en una clase en cualquier lugar en un método particular sin tener su fuente. El Eclipse IDE es preferido.¿Cómo poner punto de corte en clase sin tener su origen?

Respuesta

17

Puede establecer un punto de corte de método utilizando la vista de esquema de la clase en cuestión. Luego, el depurador se rompe en la primera línea del método.

+0

genial, no sabía que :) +1 – Bozho

+1

Por alguna razón, el menú contextual del método no contiene "Alternar punto de interrupción del método" en un espacio de trabajo nuevo, pero aparece después de que se estableció otro punto de interrupción. –

0

Me temo que necesitarás el código fuente si quieres que esto funcione.

Para la depuración, necesita códigos legibles + números de línea que coincidan con este código. Ninguno de estos elementos está incluido en los archivos de clase

+0

Afortunadamente, esto no es verdad. ¡Vea la respuesta de Thorbjørn Ravn Andersen! – vol

1

Dependiendo de su suerte, puede hacerlo con a decompiler. Tendrá que colocar el punto de interrupción en la línea adecuada (que, por desgracia, podría no contener el código "breakpointable")

La mejor manera de hacerlo es crear un contenedor ServletResponse. Por cierto, ayer creé tal cosa (con un propósito ligeramente diferente), así que aquí está:

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

El problema con el enfoque de envoltura es que ya tengo envoltorio en mi aplicación pero algún marco funciona de alguna manera directamente en la solicitud original: ese es el error :-). –

Cuestiones relacionadas