java - JVM - 在没有显式调用的情况下打印堆栈跟踪

标签 java jvm stack-trace jvm-arguments

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/

相关文章:

php - 如何让 PHP 在错误时产生回溯?

java - 如何在 YARN Spark 作业中设置环境变量?

java - Powermock - java.lang.IllegalStateException : Failed to transform class

java - 保留堆的镜像并在执行某些方法后返回它

java - 运行多个 JVM

java - 有哪些资源可以让开发人员相信 Java 堆栈跟踪值得记录

java - 查找两个字符串的交集,其中返回两个字符串中出现的字符(与第一个字符串的序列顺序相同)

java - Wildfly 8.1 - 在没有standalone.xml的情况下设置系统属性

scala - 如何开始使用 scala

来自未处理异常的 C++ 堆栈跟踪?