2009-08-20 20 views
31

Aquí es el StackTrace:Obteniendo el número de línea jsp real de un número de línea de rastreo de pila?

... 
org.apache.jsp.showcustomer_jsp._jspService(showcustomer_jsp.java:128) 
org.apache.jasper.runtime.HttpJspBase.service(Unknown Source) 

Esto es lo que hago:

  1. obtener el número de línea de la StackTrace, en este caso 128.
  2. Encuentra el archivo showcustomer_jsp.java (y ISN 't exactamente obvio para mirar en /var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp).
  3. Abrir y vaya a la línea 128.
  4. Ahora, buscar el archivo para el .jsp lo que encontraste en la línea 128 en el archivo _jsp.java.
  5. ¡Boom! ¡Terminaste!

¿Hay alguna manera más sencilla de hacerlo?

+0

Ni siquiera sabía que podía hacer eso. +1 – iandisme

Respuesta

2

No creo que puedas. El archivo JSP se compila en un servlet y no se ejecuta directamente. Como la excepción se produce desde este servlet, la línea que tiene en el seguimiento de la pila es la de la clase. La línea original en el JSP se pierde en este punto.

Por lo general, lo mejor es evitar la necesidad de escribir código o lanzar excepciones de una JSP, y encapsular la lógica en servlets y JSP, JSTL y utilizar para el flujo de control (si, forEach, etc.)

+2

WebLogic tenía una característica realmente agradable en las versiones anteriores a WL10: escribiría un comentario en el archivo Java generado que muestra el número de línea JSP de origen. Incluso si su lógica está encapsulada en un taglib, es bueno ver qué invocación arrojó. – kdgregory

+0

Y un vistazo rápido a las fuentes de Jasper parece indicar que procesa archivos JSP como un flujo de fichas, sin conocimiento de los números de línea. Por tanto, la respuesta es no. – kdgregory

+0

El IDE tiene todos los datos para calcular el número de línea original. Quizás alguien podría escribir un plugin IntelliJ que hace el trabajo. –

4

he encontrado esto page en Eclipse WTP FAQ que explica cómo configurar Eclipse para que pueda ir al código Java generado haciendo clic en la pila stack.

+0

+1, pero aún así, esto lo llevará al código java generado, no al JSP original. – Juraj

0

Solía ​​programar en Lex y Yacc lo que generaría código C, y podría habilitar las directivas de #line pre-processor para la depuración. Cuando sucedió algo en el código c generado, entonces el IDE fue lo suficientemente inteligente como para abrir el archivo lex o yacc correspondiente, y no el código c generado. Surly

Cuestiones relacionadas