堆栈跟踪显示错误位置的异常

时间:2011-05-13 05:07:42

标签: java debugging exception exception-handling remote-debugging

我正在处理一个空指针异常,我有一个堆栈跟踪。在我的日志文件中,堆栈跟踪提供行号。看起来异常堆栈跟踪上的行号是错误的。这是一个对我来说不熟悉的项目。

当我查看指定行的源代码时,有时没有代码(空行)或结束大括号(}),所以我无法找到{的原因{1}}。

  

pd的java.lang.NullPointerException   com.test.AddProductServlet.list(AddProductServlet.java:776)
    在
  com.test.AddProductServlet.list(AddProductServlet.java:436)
    在
  com.test.AddProductServlet.routeAction(AddProductServlet.java:263)
    在
  com.test.AddProductServlet.onService(AddProductServlet.java:145)
    在
  com.test.MqServlet.service(MqServlet.java:500)
    在
  javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

我在堆栈跟踪(即770,430和260)的行之前插入了断点,但仍无法找到异常的原因。

我正在使用Eclipse Helios和Java 1.6.0_16。这是一个Eclipse问题吗?如果是,需要进行哪些更改?

我重新部署了该项目,但仍有同样的问题。

接下来我该怎么办?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

  

我正在使用eclipse helios,Java 1.6.0_16。这是日食问题吗?

没有。 JVM创建堆栈跟踪,而不是Eclipse。 (我猜理论上理论上可能是Eclipse的Java编译器可能会在.class文件中插入错误的行号...但是现在已经有数十万Java开发人员注意到了......)

  

我重新部署项目还是同样的问题。接下来做什么 ?如何解决这个问题?

正如@Mike所说“您正在查看的源代码不是用于生成抛出错误的已编译代码的源代码。”

因此,它是构建,部署或配置问题:

  1. 在Eclipse中,执行F5刷新,清理并构建项目,然后重新部署并查看是否修复了行号。

  2. 手动关闭服务器,删除已部署的WAR文件和扩展目录,重新部署WAR文件并重新启动服务器。

  3. 搜索已部署的网络应用,包括所有JAR文件,以查找AddProductServlet.class的所有副本。

    • 如果有多个,请找出原因。

    • 如果只有一个,请检查它是否与您刚构建的相同,如果不相同,请找出原因。

  4. 使用Ant或其他任何方法在Eclipse之外构建代码,然后部署它。 (这将消除任何可能是Eclipse的错误......)