public final class JavaStackWalker extends Object
Java frame
information
is available.
For most cases, the "walk*" methods that apply a StackFrameVisitor
are the preferred way
to do stack walking. Use cases that are extremely performance sensitive, or cannot use a visitor
approach, can use the various "init*" and "continue*" methods directly.
The stack walking code must be allocation free (so that it can be used during garbage collection)
and not use static state (so that multiple threads can walk their stacks concurrently). State is
therefore stored in a stack-allocated JavaStackWalk
structure.
Modifier and Type | Method and Description |
---|---|
static boolean |
continueWalk(JavaStackWalk walk,
CodeInfo info)
Continue a started stack walk.
|
static boolean |
continueWalk(JavaStackWalk walk,
SimpleCodeInfoQueryResult queryResult,
DeoptimizedFrame deoptFrame) |
static boolean |
initWalk(JavaStackWalk walk,
org.graalvm.nativeimage.IsolateThread thread)
Initialize a stack walk for the given thread.
|
static void |
initWalk(JavaStackWalk walk,
org.graalvm.word.Pointer startSP)
See
JavaStackWalker.initWalk(JavaStackWalk, Pointer, CodePointer) , except that the instruction
pointer will be read from the stack later on. |
static void |
initWalk(JavaStackWalk walk,
org.graalvm.word.Pointer startSP,
org.graalvm.nativeimage.c.function.CodePointer startIP)
Initialize a stack walk for the current thread.
|
static RuntimeException |
reportUnknownFrameEncountered(org.graalvm.word.Pointer sp,
org.graalvm.nativeimage.c.function.CodePointer ip,
DeoptimizedFrame deoptFrame) |
static <T> boolean |
walkCurrentThread(org.graalvm.word.Pointer startSP,
ParameterizedStackFrameVisitor<T> visitor,
T data) |
static boolean |
walkCurrentThread(org.graalvm.word.Pointer startSP,
StackFrameVisitor visitor) |
static <T> boolean |
walkThread(org.graalvm.nativeimage.IsolateThread thread,
ParameterizedStackFrameVisitor<T> visitor,
T data) |
static boolean |
walkThread(org.graalvm.nativeimage.IsolateThread thread,
StackFrameVisitor visitor) |
public static void initWalk(JavaStackWalk walk, org.graalvm.word.Pointer startSP, org.graalvm.nativeimage.c.function.CodePointer startIP)
walk
parameter should
normally be allocated on the stack.
The stack walker is only valid while the stack being walked is stable and existent.
walk
- the stack-allocated walk base pointerstartSP
- the starting SPstartIP
- the starting IPpublic static void initWalk(JavaStackWalk walk, org.graalvm.word.Pointer startSP)
JavaStackWalker.initWalk(JavaStackWalk, Pointer, CodePointer)
, except that the instruction
pointer will be read from the stack later on.public static boolean initWalk(JavaStackWalk walk, org.graalvm.nativeimage.IsolateThread thread)
walk
parameter should
normally be allocated on the stack.walk
- the stack-allocated walk base pointerthread
- the thread to examinepublic static boolean continueWalk(JavaStackWalk walk, CodeInfo info)
JavaStackWalker.initWalk(com.oracle.svm.core.stack.JavaStackWalk, org.graalvm.word.Pointer, org.graalvm.nativeimage.c.function.CodePointer)
was
called to start the walk. Once this method returns false
, it will always return
false
.walk
- the initiated stack walk pointertrue
if there is another frame, or false
if there are no more frames
to iteratepublic static boolean continueWalk(JavaStackWalk walk, SimpleCodeInfoQueryResult queryResult, DeoptimizedFrame deoptFrame)
public static RuntimeException reportUnknownFrameEncountered(org.graalvm.word.Pointer sp, org.graalvm.nativeimage.c.function.CodePointer ip, DeoptimizedFrame deoptFrame)
public static boolean walkCurrentThread(org.graalvm.word.Pointer startSP, StackFrameVisitor visitor)
public static <T> boolean walkCurrentThread(org.graalvm.word.Pointer startSP, ParameterizedStackFrameVisitor<T> visitor, T data)
public static boolean walkThread(org.graalvm.nativeimage.IsolateThread thread, StackFrameVisitor visitor)
public static <T> boolean walkThread(org.graalvm.nativeimage.IsolateThread thread, ParameterizedStackFrameVisitor<T> visitor, T data)