2009-06-03 60 views
8

我目前使用Apache Tomcat 5.5.16来为基于Lucene的搜索API提供服务。为什么我的servlet stacktrace为我的类显示“Unknown Source”?

最近我一直在我的servlet类中有一些NullPointerExceptions。该课程被称为com.my_company.search.servlet.SearchServlet

对于某些类型的输入,我可以常规创建一个NullPointerException,但我无法确定它到底在哪里。

堆栈跟踪表明错误是发生在这里:

com.my_company.search.servlet.SearchServlet.doGet(Unknown Source)

源和.class文件的这个类是所有在:

$TOMCAT_HOME/webapps/my_servlet/WEB-INF/classes/com/my_company/search/servlet/

我的问题是,如何我可以让Tomcat为我提供更多描述性错误位置吗?

回答

21

除非有问题的类是用调试信息编译的,否则Tomcat无法为您提供更详细的信息。没有这些调试信息,JVM无法确定发生错误的代码行。

编辑:您可以通过指定要求编译器包含此信息的-goption运行在命令行上javac时。您也可以使用Javac Ant taskdebug参数指定此选项。

+0

+1,而如果使用Eclipse编译类似的讨论昨天http://stackoverflow.com/questions/939194/preserving-parameter-argument-names-in-compiled-:与选项-g编译它们java-classes – Pool 2009-06-03 14:07:08

0

当JIT编译器对您的类进行优化时,会出现位置未知来源。此时源信息丢失。要获取原始位置,请重新启动服务器并重试您的测试。大多数情况下,您将在源代码中获得位置

4

您必须将调试信息添加到您的类中。

javac -g YourServlet.java