我正在处理一个空指针异常,我有一个堆栈跟踪。在我的日志文件中,堆栈跟踪提供行号。看起来异常堆栈跟踪上的行号是错误的。这是一个对我来说不熟悉的项目。
当我查看指定行的源代码时,有时没有代码(空行)或结束大括号(}
),所以我无法找到{的原因{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问题吗?如果是,需要进行哪些更改?
我重新部署了该项目,但仍有同样的问题。
接下来我该怎么办?我该如何解决这个问题?
答案 0 :(得分:3)
我正在使用eclipse helios,Java 1.6.0_16。这是日食问题吗?
没有。 JVM创建堆栈跟踪,而不是Eclipse。 (我猜理论上理论上可能是Eclipse的Java编译器可能会在.class
文件中插入错误的行号...但是现在已经有数十万Java开发人员注意到了......)
我重新部署项目还是同样的问题。接下来做什么 ?如何解决这个问题?
正如@Mike所说“您正在查看的源代码不是用于生成抛出错误的已编译代码的源代码。”
因此,它是构建,部署或配置问题:
在Eclipse中,执行F5刷新,清理并构建项目,然后重新部署并查看是否修复了行号。
手动关闭服务器,删除已部署的WAR文件和扩展目录,重新部署WAR文件并重新启动服务器。
搜索已部署的网络应用,包括所有JAR文件,以查找AddProductServlet.class
的所有副本。
如果有多个,请找出原因。
如果只有一个,请检查它是否与您刚构建的相同,如果不相同,请找出原因。
使用Ant
或其他任何方法在Eclipse之外构建代码,然后部署它。 (这将消除任何可能是Eclipse的错误......)