提问人:mstabosz 提问时间:3/24/2023 最后编辑:mstabosz 更新时间:4/4/2023 访问量:42
Java 消失异常消息...也许是被压抑的例外?
Java vanishing Exception message... surpressed exception maybe?
问:
用 Java 编写。这是一个让我感到困惑的问题,而且感觉也超出了我的掌握范围。这是 try 块中的一个小伪代码和 catch 块中的真实代码。
try {
// 83 lines of code that do a bunch of stuff, with methods that call other
// methods which call which call other methods
} catch (Exception e) {
logger.writeLogError("*********FAILURE BEGIN*********\n");
e.printStackTrace();
logger.writeLogError("*********FAILURE END*********\n");
String errorMesg;
// Any downstream method that throws an exception without a message
// will have e.getMessage == null
if(e.getMessage() == null) {
// This is for an unanticipated exception.
// The stack trace should give more information.
errorMesg = "Skipped. Unknown exception. Check logs for string Exception thrown: ";
} else {
errorMesg = "Skipped. " + e.getMessage();
}
}
变量“errorMesg”被写入数据库表。它不会打印到日志中。所以问题来了。在代码深处的某个地方发生了一些事情,引发了 NullPointerException。这是我们在日志文件中看到的内容。
2022-10-25 14:06:28,583 ERROR [com.fdc.gibson.services.orderentry.ThisClass] (WorkerThread#39[192.168.136.172:55767]) ********FAILURE BEGIN******** 2022-10-25 14:06:28,584 ERROR [STDERR] (WorkerThread#39[192.168.136.172:55767]) java.lang.NullPointerException 2022-10-25 14:06:28,584 ERROR [com.orderentry.ThisClass] (WorkerThread#39[192.168.136.172:55767]) ********FAILURE END********
我无法弄清楚为什么堆栈跟踪中的信息如此稀疏。我的猜测是内心深处有一个被抑制的异常,只需添加对 e.getSuppressed() 的调用就会解决这个问题。我不确定。但是,为什么堆栈跟踪会被吞噬呢?也许我错过了一些明显的东西。我敢肯定我们在这里做了一些非常愚蠢的事情,但我没有编写大部分代码,我正在努力消除它。
答: 暂无答案
评论