Warum zeigt mein Servlet Stacktrace "Unknown Source" für meine Klassen an?

8

Ich verwende derzeit Apache Tomcat 5.5.16, um eine Lucene-basierte Such-API zu bedienen.

In letzter Zeit hatte ich einige NullPointerExceptions in meiner Servlet-Klasse. Die Klasse heißt com.my_company.search.servlet.SearchServlet .

Mit bestimmten Arten der Eingabe kann ich routinemäßig eine NullPointerException erstellen, aber ich habe Probleme herauszufinden, wo genau es ist.

Der StackTrace zeigt an, dass der Fehler hier auftritt:

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

Die Quell- und .class-Dateien für diese Klasse befinden sich alle in:

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

Meine Frage ist, wie kann ich Tomcat dazu bringen, mir beschreibende Fehlerstellen zu liefern?

    
zorlack 03.06.2009, 13:49
quelle

3 Antworten

21

Tomcat kann Ihnen keine detaillierteren Informationen bereitstellen, wenn die betreffenden Klassen nicht mit Debuginformationen kompiliert wurden. Ohne diese Debuginformationen kann die JVM nicht bestimmen, an welcher Codezeile der Fehler aufgetreten ist.

Bearbeiten: Sie können den Compiler bitten, diese Informationen einzufügen, indem Sie -g option , wenn javac in der Befehlszeile ausgeführt wird. Sie können diese Option auch mit dem Parameter debug der Javac Ant-Aufgabe angeben.

    
Adam Paynter 03.06.2009, 13:51
quelle
4

Sie müssen Ihren Klassen Debugging-Informationen hinzufügen. kompiliere sie mit der Option -g :

%Vor%     
cd1 03.06.2009 14:01
quelle
0

Der Speicherort unbekannter Quelle kann auftreten, wenn der JIT-Compiler Ihre Klasse optimiert hat. Zu diesem Zeitpunkt ist die Quellinformation verloren. Um den ursprünglichen Speicherort zu erhalten, starten Sie den Server neu und wiederholen Sie den Test. Die meiste Zeit erhalten Sie den Ort in Ihrer Quelle

    
Salandur 03.06.2009 13:54
quelle