如何从 Stacktrace 中隐藏一个方法而不是它的异常?
How to hide a method from Stacktrace but not its exception?
我遇到这种情况,我的方法抛出一些异常。我屏蔽了异常,因此不会显示它到底是什么,但是在堆栈跟踪中也显示了它来自的方法。
代码是这样的:
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
有什么办法可以实现吗?
您可以使用 Throwable.setStackTrace
执行此操作。只需传入一个省略相关元素的数组即可。
您可以按照以下方式进行:
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()获取当前堆栈跟踪,然后过滤您不想在堆栈中显示的方法,并相应地设置新的堆栈跟踪。
就个人而言,我认为最好不要删除该方法,只需将其名称替换为
"Method removed from call stack"
不要误导那些必须查看堆栈跟踪才能找出错误来源的人。
我遇到这种情况,我的方法抛出一些异常。我屏蔽了异常,因此不会显示它到底是什么,但是在堆栈跟踪中也显示了它来自的方法。
代码是这样的:
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
有什么办法可以实现吗?
您可以使用 Throwable.setStackTrace
执行此操作。只需传入一个省略相关元素的数组即可。
您可以按照以下方式进行:
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()获取当前堆栈跟踪,然后过滤您不想在堆栈中显示的方法,并相应地设置新的堆栈跟踪。
就个人而言,我认为最好不要删除该方法,只需将其名称替换为
"Method removed from call stack"
不要误导那些必须查看堆栈跟踪才能找出错误来源的人。