Maison  >  Article  >  Java  >  Comment afficher tous les cadres de pile du thread actuel dans Java 9 ?

Comment afficher tous les cadres de pile du thread actuel dans Java 9 ?

WBOY
WBOYavant
2023-09-05 20:09:06831parcourir

在Java 9中如何显示当前线程的所有堆栈帧?

Stack Walking API peut fournir un mécanisme flexible pour parcourir la pile d'appels et extraire des informations, nous permettant de filtrer et d'accéder aux trames de manière paresseuse. La classe StackWalker est le point d'entrée de l'API Stack Walking. Une trace de pile représente une pile d'appels à un moment donné, où chaque élément représente un méthode appel . Il contient tous les appels depuis le démarrage du thread jusqu'à la génération.

Dans l'exemple ci-dessous, nous pouvons utiliser l'API StackWalker pour imprimer/afficher tous les cadres de pile du thread actuel.

Exemple
import java.lang.StackWalker.StackFrame;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;

public class StackWalkerTest {
   public static void main(String args[]) throws Exception {
      Method test1Method = Helper1.class.<strong>getDeclaredMethod</strong>("test1", (Class<!--?-->[])null);
      test1Method.invoke(null, (Object[]) null);
   }
}

<strong>// Helper1 class
</strong>class Helper1 {
   protected static void test1() {
      Helper2.test2();
   }
}

<strong>// Helper2 class</strong>
class Helper2 {
   protected static void test2() {
      <strong>List<StackFrame></strong> stack = <strong>StackWalker.getInstance().walk</strong>((s) -> s.<strong>collect</strong>(Collectors.toList()));
      for(<strong>StackFrame </strong>frame : stack) {
         System.out.println(frame.<strong>getClassName()</strong> + " " + frame.<strong>getLineNumber()</strong> + " " +    frame.<strong>getMethodName()</strong>);
      }
   }
}

Sortie

<strong>Helper2 23 test2
Helper1 16 test1
StackWalkerTest 9 main</strong>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Julia contre JavaArticle suivant:Julia contre Java