5

为了响应Java 的 NullPointerException 可以更改为报告哪个变量为空? 索比约恩-拉文-安德森说:

不,类文件中的调试信息不​​包含足够的信息来允许这样做。

我的问题是,为什么不呢?

4

3 回答 3

3

它可能根本不是一个变量:它可能是一个临时结果,例如方法调用的结果。到 NPE 发生时,它只是一个匿名堆栈槽。

于 2013-01-02T21:42:59.300 回答
3

实际的异常指向特定的字节码指令,但语言语句可能会扩展为数十条指令,并引用了六个不同的指针。此外,指针可能在几条指令的持续时间内一直保存在临时存储器(字节码堆栈)中,因此与特定变量名称的关联可能会丢失。

一个花哨的调试器可以对“出错”的变量做出公平的猜测,但一般来说,指向失败的语句就足够了(尽管请记住,失败可能是由于先前的语句,其动作是延期)。

于 2013-01-02T21:36:17.977 回答
0

因为代码中的行号足以跟踪它。

于 2013-01-02T21:46:36.903 回答