Obtendo o número da linha jsp real de um número de linha de rastreamento de pilha?

Aqui está o stacktrace:

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

Isto é o que eu faço:

  1. Obtenha o número da linha do stacktrace, neste caso 128.
  2. Encontre o arquivo showcustomer_jsp.java (e não é exatamente óbvio procurar em /var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp ).
  3. Abra e vá para a linha 128.
  4. Agora, pesquise no arquivo .jsp o que você encontrou na linha 128 no arquivo _jsp.java .
  5. Estrondo! Você está feito!

Por favor, existe uma maneira mais simples de fazer isso?

Eu encontrei esta página no FAQ do Eclipse WTP que explica como configurar o Eclipse para que você possa ir para o código java gerado clicando no stacktrace.

Eu não acho que você possa. O arquivo JSP é compilado em um servlet e não é executado diretamente. Como a exceção é lançada desse servlet, a linha que você tem no rastreamento de pilha é a da class. A linha original no JSP é perdida neste momento.

Geralmente, é melhor evitar escrever código ou lançar exceções de um jsp e encapsular sua lógica em servlets e tags JSP e usar o JSTL para stream de controle (if, forEach, etc.)

Eu costumava programar em Lex e Yacc, o que geraria código C, e você poderia habilitar diretivas pré-processador #line para debugging. Quando algo acontecia no código c gerado, o IDE era inteligente o suficiente para abrir o arquivo lex ou yacc correspondente e não o código c gerado. Grosseiro