首頁 > Java > java教程 > 主體

如何在Java 9中使用StackWalker API過濾堆疊幀?

WBOY
發布: 2023-09-14 18:25:02
轉載
791 人瀏覽過

如何在Java 9中使用StackWalker API过滤堆栈帧?

StackWalkerAPI 在程式執行期間​​提供堆疊追蹤中的資訊流。此 API 需要虛擬機器來擷取整個堆疊的快照並傳回用於過濾目的的元素陣列。我們需要使用 walk() 方法來跳過、刪除和限制堆疊框架。我們還可以使用 filter() 方法按類別過濾堆疊幀以獲取第一個匹配幀以及所有匹配幀。

在下面的範例中,我們可以使用 StackWalker API 來過濾堆疊幀。

範例

import java.lang.StackWalker.StackFrame;
import java.util.*;
import java.util.stream.*;

public class StackWalkerFilterTest {
   public static void main(String args[]) {
      final <strong>List<Class></strong> filterClasses = new ArrayList<>();
      filterClasses.add(StackWalkerFilterTest.class);

      System.out.println("--- filter Frame by Class >> get first matching frame ---");
      <strong>Optional<StackFrame></strong> frameByClass = findFrameByClass(filterClasses);
      System.out.println(frameByClass.toString());

      System.out.println("--- filter Frame by Class >> get all matching frames ---");
      <strong>List<StackFrame></strong> framesByClass = findAllFramesByClass(filterClasses);
      System.out.println(framesByClass);
   }
   private static Optional<StackFrame> findFrameByClass(List<Class> filterClasses) {
      return <strong>StackWalker.getInstance</strong>(StackWalker.Option.<strong>RETAIN_CLASS_REFERENCE</strong>)
.<strong>walk</strong>(s -> s.<strong>filter</strong>(f -> filterClasses.contains(f.getDeclaringClass())).<strong>findFirst()</strong>);
   }
   private static List<StackFrame> findAllFramesByClass(List<Class> filterClasses) {
      return StackWalker.getInstance(StackWalker.Option.<strong>RETAIN_CLASS_REFERENCE</strong>).<strong>walk</strong>(
s -> s.<strong>filter</strong>(f -> filterClasses.contains(f.getDeclaringClass())).<strong>collect</strong>(Collectors.toList()));
   }
}
登入後複製

輸出

<strong>--- filter Frame by Class >> get first matching frame ---
Optional[StackWalkerTest.findFrameByClass(StackWalkerTest.java:20)]
--- filter Frame by Class >> get all matching frames ---
[StackWalkerTest.findAllFramesByClass(StackWalkerTest.java:23), StackWalkerTest2.main(StackWalkerTest.java:15)]</strong>
登入後複製

以上是如何在Java 9中使用StackWalker API過濾堆疊幀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板