java - 调用 exception.fillInStacktrace 有用吗?

标签 java stack-trace

我发现在创建异常 Exception e = new Exception() 之后直接显式调用了 e.fillInStacktrace()

我认为这是多余的,因为 Throwable 的构造函数已经调用了 fillInStacktrace()

但也许我忽略了一些东西,这几行很有用:

Exception e = new Exception();
e.fillInStackTrace();
creationInfo = new CreationInfo(e.getStackTrace());

(public CreationInfo(StackTraceElement[] aStackTrace){...})

我觉得

  1. 在创建异常后直接额外调用 e.fillInStackTrace(); 是多余的,并且会浪费大量资源,因为这种方法很昂贵。

    <
  2. 似乎只有获取当前堆栈跟踪才需要此构造,因此:

    creationInfo = Thread.currentThread().getStackTrace();
    

    是更好的方法。

在填写问题报告之前我想问你是不是我忽略了什么?

最佳答案

您在这两个方面都是正确的:fillInStackTrace 可用的最大原因是让您在自己的异常中覆盖它,从而节省提供堆栈跟踪信息的成本,或者您需要隐藏有关可能引发异常的位置的信息的位置。参见 this answer了解更多详情。

关于java - 调用 exception.fillInStacktrace 有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472719/

相关文章:

java - SignerID 转换为 BouncyCasSTLe 库中的 X509CertSelector

java - RMI:客户端向服务器发送消息

java - FileProvider - 由于 FileNotFoundException :/Download/TempFile. html(没有这样的文件或目录),无法保存文件

java - 检查特定索引处的数组是否为 NULL 返回 NullPointerException

c++ - 获取正在运行的进程的堆栈回溯

java - 从堆栈跟踪 : "MyClass.java:1" 中的第一行调用方法

java - 如何将刻度从 java 转换为带有时区的 DateTime c#

profiling - 为什么 valgrind Massif 不报告任何函数名称或代码引用?

java - 堆栈跟踪 : StackTraceElement Customization

gcc - Stacktrace arm-linux-gcc