我们的 Java 代码实例捕获了一个 NullPointerException
,但是当我尝试记录 StackTrace(基本上最终调用 Throwable.printStackTrace()
时) ,我得到的只是:
java.lang.NullPointerException
还有其他人遇到过这个吗?我尝试在谷歌上搜索“java 空指针空堆栈跟踪”,但没有遇到类似的情况。
最佳答案
您可能正在使用 HotSpot JVM(最初由 Sun Microsystems,后来被 Oracle 收购,是 OpenJDK 的一部分),它执行了大量优化。要取回堆栈跟踪,您需要将以下选项传递给 JVM:
-XX:-OmitStackTraceInFastThrow
优化的是,当第一次发生异常(通常是NullPointerException
)时,会打印完整的堆栈跟踪,并且JVM会记住堆栈跟踪(或者可能只是代码的位置)。当该异常经常发生时,将不再打印堆栈跟踪,既可以实现更好的性能,也不会用相同的堆栈跟踪淹没日志。
要了解这是如何在 HotSpot JVM 中实现的,grab a copy of it并搜索全局变量 OmitStackTraceInFastThrow
。上次看代码(2019年),在文件graphKit.cpp .
关于java - 没有 StackTrace 的 Java 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411487/