2009-08-20 6 views
31

Voici le stacktrace:Obtenir le numéro de ligne jsp réel à partir d'un numéro de ligne de trace de la pile?

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

Voici ce que je fais:

  1. Obtenez le numéro de ligne du stacktrace, dans ce cas 128.
  2. Trouver le fichier showcustomer_jsp.java (et ISN 't pas exactement évident de regarder /var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp).
  3. Ouvrir et allez à la ligne 128.
  4. Maintenant, recherchez le fichier .jsp pour le tout ce que vous avez trouvé sur la ligne 128 dans le fichier _jsp.java.
  5. Boom! Vous avez terminé!

S'il vous plaît, est-il un moyen plus simple de le faire?

+0

Je ne savais même pas que vous pouviez le faire. +1 – iandisme

Répondre

2

Je ne pense pas que vous le pouvez. Le fichier JSP est compilé dans une servlet et n'est pas exécuté directement. Comme l'exception est levée à partir de ce servlet, la ligne que vous avez dans la trace de la pile est celle de la classe. La ligne d'origine dans la JSP est perdue à ce stade.

Habituellement, il est préférable d'éviter l'écriture de code ou de lancer des exceptions d'une jsp et encapsuler votre logique servlets et les balises JSP, et utiliser JSTL pour le flux de contrôle (si, forEach, etc.)

+2

WebLogic avait une fonctionnalité vraiment intéressante dans les versions pré-WL10: il écrirait un commentaire dans le fichier Java généré montrant le numéro de ligne JSP source. Même si votre logique est encapsulée dans un taglib, il est agréable de voir quelle invocation a été lancée. – kdgregory

+0

Et un coup d'œil sur les sources de Jasper semble indiquer qu'il traite les fichiers JSP en tant que flux de jeton, sans connaître les numéros de ligne. Donc la réponse est non. – kdgregory

+0

L'IDE a toutes les données pour calculer le numéro de ligne d'origine. Peut-être que quelqu'un pourrait écrire un plugin IntelliJ qui fait le travail. –

4

J'ai trouvé ce page sur FAQ Eclipse WTP qui explique comment configurer Eclipse afin que vous puissiez aller au code java généré en cliquant sur la trace de pile.

+0

+1, mais tout de même - cela vous amènera au code java généré uniquement, pas JSP d'origine. – Juraj

0

J'avais l'habitude de programmer dans Lex et Yacc qui générerait le code C, et vous pourriez activer des directives de pré-processeur de ligne pour le débogage. Lorsque quelque chose se produisait dans le code c généré, l'EDI était assez intelligent pour ouvrir le fichier lex ou yacc correspondant, et non le code c généré. Surly

Questions connexes