2009-06-03 62 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