SavedFrame¶
SavedFrame
实例是一个单向链接的堆栈帧列表。它表示过去某个执行时刻的 JavaScript 调用堆栈。较新的帧持有对调用它们的帧的引用。较旧的尾部在许多较新的帧之间共享。
SavedFrame
堆栈通常应该在正在观察或调试的隔间中捕获、分配和生存。通常这是一个内容隔间。
捕获 SavedFrame
堆栈¶
从 C++¶
使用 JS::CaptureCurrentStack
,它在 jsapi.h
中声明。
从 JS¶
使用 saveStack
,可以通过 Components.utils.getJSTestingFunction()
访问。
包含和排除 Chrome 框架¶
考虑以下 SavedFrame
堆栈。箭头表示从子帧到父帧的链接,content.js
来自具有内容权限的隔间,而 chrome.js
来自具有 Chrome 权限的隔间。
function A from content.js
|
V
function B from chrome.js
|
V
function C from content.js
内容隔间将始终对该堆栈有一个视图:A -> C
。
但是,Chrome 隔间可以选择:它可以采用与内容隔间相同的视图 (A -> C
),或者它可以查看所有堆栈帧,包括来自 Chrome 隔间的帧 (A -> B -> C
)。要查看所有内容,请使用 XrayWrapper
。这是默认包装器。要查看内容隔间看到的堆栈,请使用 Components.utils.waiveXrays
取消 X 光包装器。
const contentViewOfStack = Components.utils.waiveXrays(someStack);
SavedFrame.prototype
对象的访问器属性¶
source
¶
此堆栈帧的源 URL,作为字符串。
sourceId
¶
此源的进程唯一的内部整数 ID。可用于使用其 id
属性将 SavedFrame 与 Debugger.Source 匹配。
line
¶
此堆栈帧的行号。
column
¶
此堆栈帧的列号。
functionDisplayName
¶
SpiderMonkey 推断的此堆栈帧函数的名称,或 null
。
asyncCause
¶
如果此堆栈帧是其他堆栈帧的 asyncParent
,则这是一个表示此帧调用其子项的异步调用的类型的字符串。例如,如果此帧的子项是对此帧创建的 Promise 的处理程序的调用,则此帧的 asyncCause
将是 "Promise"
。如果异步调用是在属性请求者无法访问的后代帧中启动的,则这将是通用字符串 "Async"
。如果不是异步调用点,则为 null
。
asyncParent
¶
如果此堆栈帧是作为异步操作的结果调用的,例如,如果此帧引用的函数是 Promise 处理程序,则此属性指向负责异步调用的堆栈帧,例如创建 Promise 的位置。如果调用负责的帧对调用者不可访问,则如果存在,则指向实际帧的最年轻的可访问祖先。在所有其他情况下,这都是 null
。
parent
¶
此堆栈帧的调用方,或者如果这是堆栈中最旧的帧,则为 null
。在这种情况下,可能会有一个 asyncParent
代替。
SavedFrame.prototype
对象的函数属性¶
toString()
¶
将此帧及其父级格式化为人类可读的堆栈跟踪字符串。