捕获java中所有抛出的异常?

捕获java中所有抛出的异常?,java,exception-handling,first-chance-exception,Java,Exception Handling,First Chance Exception,我怀疑这样的事情是可能的,但如果不将调试器附加到java应用程序,是否有可能在某个集合中填充有关java应用程序中生成的每个异常的信息,而不管它是否被捕获?我知道在.NET中,应用程序会生成有关异常的消息,这些异常在当时被称为“第一次机会异常”,应用程序可能会也可能不会随后处理这些异常。我想知道java中是否有类似的机制,我可以利用它来查看运行时生成的所有异常的信息 我只是想澄清一下。这与异常发生的上下文无关。这个问题不是关于我在catch块中做什么,也不是关于未处理的异常。它是关于知道JVM是

我怀疑这样的事情是可能的,但如果不将调试器附加到java应用程序,是否有可能在某个集合中填充有关java应用程序中生成的每个异常的信息,而不管它是否被捕获?我知道在.NET中,应用程序会生成有关异常的消息,这些异常在当时被称为“第一次机会异常”,应用程序可能会也可能不会随后处理这些异常。我想知道java中是否有类似的机制,我可以利用它来查看运行时生成的所有异常的信息


我只是想澄清一下。这与异常发生的上下文无关。这个问题不是关于我在catch块中做什么,也不是关于未处理的异常。它是关于知道JVM是否提供了一种机制来查看运行时生成的每个异常,而不管生成异常的是什么或上下文。

为什么不呢,这当然是可能的!但首先。。记录JVM遇到的所有异常都是浪费生命。这在任何意义上都是毫无意义的,可能会有一些没有任何意义的例外

但如果确实没有选择,您可以调整Java来实现这一点

打破优秀编程的每一条规则,我们为之而活,我给你一个想法:

  • java.lang.Exception
    的源代码从JDK源代码复制到项目中

  • Exception.java中创建一个方法,如下所示:

    private void logException() {
        // Your logging routine here.
    }
    
  • 编辑
    java.lang.Exception
    以在每个构造函数的末尾调用此方法
    logException()

  • 将新的
    java.lang.Exception
    添加到bootstrap类路径

  • 设置日志记录级别等,然后运行


  • 抬起头,把这件事告诉你的古怪客户,运用你的外交技巧,用几句话吓唬他们:“我们能行。”。。但这是你自己的风险”。您可能会说服他不要使用此选项。

    为什么不想捕获异常?如果它被捕获,只需将stacktrace添加到log4j或类似的东西中即可?我们有一个客户,他脑子里一直想着它,他可以从应用程序生成的完整异常列表中获得有意义的信息,无论这些异常是否未经处理。我们还希望避免重构代码库的大部分,以执行您建议的操作,并在每个try语句中捕获异常数据。也许这会有所帮助:您的客户机被欺骗了。最终,这些技术细节不应该是你客户的问题。顺便说一句,公认的答案不是很准确。它拦截异常构造,但不拦截异常抛出。不是所有构造的异常都会被抛出,也不是所有抛出的异常都会被构造。我尝试过这个,我想它已经足够好了,还有一个问题,在做了这样的事情之后,感觉真的很脏是正常的吗?是的,完全正确。这是进行反演示的最佳方法之一。除了开玩笑,这样做会破坏经过良好测试的产品的一致性,严重破坏并发性,增加未经测试的代码的影响,而没有进行详尽的系统测试(不仅仅是您的代码,还有JVM),可能还有很多事情我都想不起来了,晚安。