Maison > Java > javaDidacticiel > le corps du texte

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

WBOY
Libérer: 2023-09-05 20:09:06
avant
835 Les gens l'ont consulté

在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>);
      }
   }
}
Copier après la connexion

Sortie

<strong>Helper2 23 test2
Helper1 16 test1
StackWalkerTest 9 main</strong>
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal