我们的Java代码遇到了NullPointerException
的情况,但是当我尝试记录StackTrace(实际上调用了Throwable.printStackTrace()
)时,我得到的仅仅是:
java.lang.NullPointerException
有其他人遇到过这个问题吗?我尝试谷歌搜索“java空指针空栈跟踪”,但没有找到类似的内容。
我们的Java代码遇到了NullPointerException
的情况,但是当我尝试记录StackTrace(实际上调用了Throwable.printStackTrace()
)时,我得到的仅仅是:
java.lang.NullPointerException
有其他人遇到过这个问题吗?我尝试谷歌搜索“java空指针空栈跟踪”,但没有找到类似的内容。
你的问题还不够清楚,无法确定是你的代码调用了printStackTrace()
还是由日志处理程序执行。
以下是可能发生的情况:
使用的记录器/处理程序已配置为仅输出异常消息字符串,而不是完整的堆栈跟踪。
你的应用程序(或某些第三方库)正在使用LOG.error(ex);
记录异常,而不是例如log4j Logger方法的两个参数形式。
消息来自于你认为的不同位置;例如,它实际上来自于某个第三方库方法,或者是早期尝试调试留下的一些随机内容。
被记录的异常已经重载了一些方法以隐藏堆栈跟踪。如果是这种情况,异常将不是真正的NullPointerException,而是NPE的某个自定义子类型甚至是某个不相关的异常。
我认为最后一种可能性相当不可能,但人们至少考虑过这样做来“防止”反向工程。当然,这只会使诚实的开发人员的生活变得困难。
for (StackTraceElement st : e.getStackTrace()) {
LOGGER.error(st.toString());
}
-XX: -OmitStackTraceInFastThrow
的更多信息,请参见 https://dev59.com/eG445IYBdhLWcg3w3N6z。 - Vadzim