【问题标题】:Why does my servlet stacktrace show "Unknown Source" for my classes?为什么我的 servlet 堆栈跟踪为我的类显示“未知来源”?
【发布时间】:2009-06-03 13:49:50
【问题描述】:

我目前正在使用 Apache Tomcat 5.5.16 来提供基于 Lucene 的搜索 API。

最近,我的 servlet 类中出现了一些 NullPointerExceptions。该类称为com.my_company.search.servlet.SearchServlet

对于某些类型的输入,我通常可以创建 NullPointerException,但我无法确定它的确切位置。

StackTrace 表明这里发生了错误:

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

这个类的源文件和.class文件都在:

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

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

【问题讨论】:

    标签: java exception servlets stack-trace nullpointerexception


    【解决方案1】:

    Tomcat 无法为您提供更详细的信息,除非相关类是使用调试信息编译的。如果没有这些调试信息,JVM 就无法确定错误发生在哪一行代码上。

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

    【讨论】:

    • +1,如果使用 Eclipse 编译类似昨天讨论过stackoverflow.com/questions/939194/…
    • +1,添加注释,您可能需要考虑重构您的 doGet 方法 - 如果您的方法足够小并且执行的操作足够少,只需知道哪个输入为 null 以及它在哪个方法中可能就足够了。 (但在打开调试的情况下进行编译绝对是您当前问题的答案。)
    • 谢谢,这很有帮助。我将 debug=true 添加到构建文件的 javac 部分,它运行良好。是的。毫无疑问我需要重构我的 doGet =)
    【解决方案2】:

    您必须将调试信息添加到您的类中。使用选项-g 编译它们:

    javac -g YourServlet.java
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 2021-06-08
        • 1970-01-01
        • 2013-03-13
        • 2012-03-02
        • 2018-02-09
        相关资源
        最近更新 更多