今天遇到个java.lang.NullPointerException: null,发现没有堆栈信息,无法定位。看了下代码,按道理是会打印堆栈的啊。
try {
...
} catch(Throwable e) {
log.error("", e);
}
查了下(https://stackoverflow.com/questions/2411487/nullpointerexception-in-java-with-no-stacktrace),发现是log的优化,如果NPE在代码中同一个地方出现多次,log会进行优化,不再打印堆栈信息。
也就是说,最开始的时候是会打印错误堆栈的。
翻日志到错误最早发生的地方,果然发现有打印错误堆栈。
另外,有很多人说是jdk的bug,在启动时加启动参数 -XX:-OmitStackTraceInFastThrow 也可以解决。
本文探讨了Java中NullPointerException未打印堆栈的问题及原因。通过查阅资料发现,这可能是由于日志优化机制导致,当同一位置频繁出现NPE时,后续的堆栈将被省略。此外,还提到了可以通过启动参数-XX:-OmitStackTraceInFastThrow来解决此问题。
9777

被折叠的 条评论
为什么被折叠?



