3

java中有没有办法在不修改代码的情况下打印catch块中任何异常的堆栈跟踪。有人告诉我有一个 JVM 参数,您可以使用它来生成所有异常的堆栈跟踪以进行调试,尽管我找不到任何关于此的文档。我能想到的唯一解决方案是使用 aspectj 并在创建的任何异常上创建一个方面并打印堆栈跟踪。我希望有比方面更好的解决方案。

谢谢,史蒂夫。

--Edit-- 所以我想知道的是我有这个代码:try { throw new Exception(); } catch (Exception e) { //忽略异常 }

我希望看到 e.printStackTrace() 即使没有调用它。这可以帮助调试我看到的 jvm 崩溃,并且隐藏了很多错误。

4

2 回答 2

2

正如 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);
    }
});
于 2012-05-09T20:36:30.450 回答
1

更好的解决方案只存在于未处理的异常。没有一流的支持来记录 任何异常,在正常运行的代码中发生的任何地方。如果可能的话,我建议您尝试使用方面并拦截Throwable构造函数调用。如果可能,您可能仍然会得到误报,因为实例化异常并不需要抛出它。

于 2012-05-09T19:13:42.890 回答