1

我正面临这种情况,我的方法会引发一些异常。我屏蔽了异常,因此它没有显示到底是什么,但是在堆栈跟踪中也显示了它来自的方法。

代码是这样的:

public Something methodForHiding() throws Exception {
    try { 
            some code
       }
    catch (Exception e) {
       throw ExcpetionMask.maskExep();
   }
   return Something
}

在堆栈跟踪中,我得到:

at com.Program.maskedException
at com.Program.methodForHiding

我想从堆栈跟踪中删除这个methodForHiding并只留下maskedException

有什么办法可以做到这一点?

4

2 回答 2

2

你可以这样做:

public class CustomException extends Exception{

    public CustomException() {
        StackTraceElement[] stackTrace = super.getStackTrace();
        StackTraceElement[] newArray = Arrays.stream(stackTrace).filter(i -> i.getMethodName().equals("The method to remove"))
                .toArray(StackTraceElement[]::new);
        super.setStackTrace(newArray);
    }
}

在自定义异常的构造函数上,通过调用public void setStackTrace(StackTraceElement[] stackTrace)来编辑堆栈跟踪。

首先使用public StackTraceElement[] getStackTrace()获取当前堆栈跟踪,然后过滤您不希望在堆栈中显示的方法,并相应地设置新的堆栈跟踪。

就个人而言,我认为最好不要删除该方法,而是简单地将其名称替换为类似

“从调用堆栈中删除的方法”

不要误导那些必须查看堆栈跟踪以找出错误来源的人。

于 2021-04-04T15:00:52.800 回答
1

您可以使用Throwable.setStackTrace. 只需传入一个省略相关元素的数组即可。

于 2021-04-04T14:57:21.910 回答