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.
Exempleimport 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>); } } }
<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!