【发布时间】:2011-07-22 15:24:38
【问题描述】:
假设您的 Java 代码如下所示:
getPerson().getParent().getSiblings().first().getName()
然后你在该行上得到一个 NullPointerException。你怎么知道哪个是空的?您可以对其进行调试并检查每个调用,也可以暂时将链接拆分为多行。
但是,我记得不久前看到了一个开源项目,它可以运行,我认为它是一个 javaagent,它可以为 NullPointerException 提供更好的堆栈跟踪,它提供返回 null 结果的方法调用。不幸的是,我似乎找不到它。有谁知道这是怎么做的,或者它是什么工具?
【问题讨论】:
-
@Moonbeam 来自堆栈跟踪,他不会知道哪个方法导致它,因为它是按行的。
-
堆栈跟踪显示,例如“SomeFile.java:11”,其中第 11 行是上面的行。问题是你怎么知道 getPerson() 返回 null 还是 getParent() 返回 null 等等
-
我调试应用程序,设置断点,然后检查什么是空的。
-
另外,我建议您考虑使用一些 EL 引擎,或 JXPath - 使用 XPath 语法操作 Java Bean 的实用工具。
-
@Ondra,如果你这样做,你不会失去静态类型检查和重构吗?
标签: java nullpointerexception javaagents