从堆栈跟踪行号获取实际的jsp行号?

时间:2009-08-20 08:30:06

标签: java debugging jsp tomcat

这是stacktrace:

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

这就是我的所作所为:

  1. 从堆栈跟踪中获取行号,在本例中为128。
  2. 查找showcustomer_jsp.java文件(查看/var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp并不是很明显。)
  3. 打开它,然后转到第128行。
  4. 现在,在.jsp文件中搜索_jsp.java文件中第128行找到的内容。
  5. 轰!你做完了!
  6. 拜托,有更简单的方法吗?

3 个答案:

答案 0 :(得分:4)

我在Eclipse WTP FAQ上找到了这个page,它解释了如何配置Eclipse,以便你可以点击堆栈跟踪转到生成的java代码。

答案 1 :(得分:2)

我认为你不能。 JSP文件被编译为servlet,不直接运行。当从这个servlet抛出异常时,堆栈跟踪中的行就是类中的行。此时JSP中的原始行已丢失。

通常最好避免从jsp编写代码或抛出异常,并将您的逻辑封装在servlet和JSP标记中,并使用JSTL作为控制流(if,forEach等)

答案 2 :(得分:0)

我曾经在Lex和Yacc中编程生成C代码,你可以启用#line预处理器指令进行调试。当生成的c代码中发生了某些事情时,IDE就足够智能打开相应的lex或yacc文件,而不是生成的c代码。切切实实