2009-08-20 8 views
31

Ecco lo stacktrace:Ottenere il numero di linea jsp effettivo da un numero di linea traccia stack?

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

Questo è quello che faccio:

  1. ottenere il numero di linea dal stacktrace, in questo caso 128.
  2. Individuare il file showcustomer_jsp.java (ed esso isn è esattamente ovvio guardare in /var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp).
  3. aprirlo e andare alla riga 128.
  4. Ora, cercare il file .jsp per il tutto quello che hai trovato on line 128 nel file _jsp.java.
  5. Boom! Hai finito!

Per favore, c'è un modo più semplice per farlo?

+0

Non sapevo nemmeno che potevi farlo. +1 – iandisme

risposta

2

Non penso che tu possa. Il file JSP è compilato in un servlet e non viene eseguito direttamente. Poiché l'eccezione è generata da questo servlet, la linea che si trova nella traccia dello stack è quella della classe. La linea originale nel JSP è persa a questo punto.

Di solito è meglio evitare di scrivere codice o generare eccezioni da una jsp, e incapsulare la logica di servlet e JSP tag, e utilizzare JSTL per il flusso di controllo (se, forEach, etc.)

+2

WebLogic aveva una funzionalità davvero interessante nelle versioni pre-WL10: scriveva un commento nel file Java generato che mostra il numero di linea JSP di origine. Anche se la tua logica è incapsulata in un taglib, è bello vedere quale invocazione ha gettato. – kdgregory

+0

E una rapida occhiata alle fonti di Jasper sembra indicare che elabora i file JSP come un flusso di token, senza conoscere i numeri di linea. Quindi la risposta è no. – kdgregory

+0

L'IDE ha tutti i dati per calcolare il numero di linea originale. Forse qualcuno potrebbe scrivere un plugin IntelliJ che fa il lavoro. –

4

ho trovato questo page su Domande frequenti su Eclipse WTP che spiega come configurare Eclipse in modo da poter accedere al codice java generato facendo clic sullo stacktrace.

+0

+1, ma ancora: questo ti porterà solo al codice java generato, non al JSP originale. – Juraj

0

Ho usato per programmare in Lex e Yacc che genererebbe il codice C, e potreste abilitare le direttive #line pre-processore per il debug. Quando qualcosa è accaduto nel codice c generato, l'IDE era abbastanza intelligente da aprire il file lex o yacc corrispondente, e non il codice c generato. Surly