簡體   English   中英

如何從 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

有什么辦法可以做到這一點?

你可以這樣做:

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()獲取當前堆棧跟蹤,然后過濾您不希望在堆棧中顯示的方法,並相應地設置新的堆棧跟蹤。

就個人而言,我認為最好不要刪除該方法,而是簡單地將其名稱替換為類似

“從調用堆棧中刪除的方法”

不要誤導那些必須查看堆棧跟蹤以找出錯誤來源的人。

您可以使用Throwable.setStackTrace執行此操作。 只需傳入一個省略相關元素的數組即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM