SavedFrame
A SavedFrame
instance is a singly linked list of stack frames. It represents a JavaScript call stack at a past moment of execution. Younger frames hold a reference to the frames that invoked them. The older tails are shared across many younger frames.
SavedFrame
stacks should generally be captured, allocated, and live within the compartment that is being observed or debugged. Usually this is a content compartment.
SavedFrame
StacksUse JS::CaptureCurrentStack
declared in jsapi.h
.
Use saveStack
, accessible via Components.utils.getJSTestingFunction()
.
Consider the following SavedFrame
stack. Arrows represent links from child to parent frame, content.js
is from a compartment with content principals, and chrome.js
is from a compartment with chrome principals.
function A from content.js
|
V
function B from chrome.js
|
V
function C from content.js
The content compartment will ever have one view of this stack: A -> C
.
However, a chrome compartment has a choice: it can either take the same view that the content compartment has (A -> C
), or it can view all stack frames, including the frames from chrome compartments (A -> B -> C
). To view everything, use an XrayWrapper
. This is the default wrapper. To see the stack as the content compartment sees it, waive the xray wrapper with Components.utils.waiveXrays
:
const contentViewOfStack = Components.utils.waiveXrays(someStack);
SavedFrame.prototype
Objectsource
line
column
functionDisplayName
null
.
asyncCause
asyncParent
of other stack frames, then this is a string representing the type of asynchronous call by which this frame invoked its children. For example, if this frame’s children are calls to handlers for a promise this frame created, this frame’s asyncCause
would be "Promise"
. If the asynchronous call was started in a descendant frame to which the requester of the property does not have access, this will be the generic string "Async"
. If this is not an asynchronous call point, this will be null
.
asyncParent
null
.
parent
null
if this is the oldest frame on the stack. In this case, there might be an asyncParent
instead.
SavedFrame.prototype
ObjecttoString