Java 中有没有一种方法可以在不修改代码的情况下打印 catch block 中任何异常的堆栈跟踪。有人告诉我,有一个 JVM arg 可用于生成所有异常的堆栈跟踪以进行调试,尽管我找不到任何关于此的文档。我能想到的唯一解决方案是使用 aspectj 并在创建的任何异常上创建一个方面并打印堆栈跟踪。我希望有比方面更好的解决方案。
谢谢, 史蒂夫。
--编辑-- 所以我想知道的是假设我有这段代码: 尝试 { 抛出新的异常(); } catch (异常e){ //忽略异常
我想查看 e.printStackTrace(),即使没有调用它。这有助于调试我看到的 jvm 崩溃,并且隐藏了很多错误。
最佳答案
正如 Marko Topolnik 所说,记录任何异常可能需要一些工作,但您也可以实现自定义未捕获异常处理程序来处理未捕获异常。
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
private final Logger log = Logger.getLogger("EXCEPTION");
public void uncaughtException(final Thread t, final Throwable e) {
log.logp(Level.SEVERE, "EXCEPTION", "", "Unhandled exception in thread " + t.getName() + ": ", e);
}
});
关于java - JVM - 在没有显式调用的情况下打印堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521765/