Debugger.Source¶
一个 Debugger.Source
实例表示一段 JavaScript 源代码或 WebAssembly 代码块的序列化文本。这两种情况的区别在于,后者其 introductionType
属性始终为 "wasm"
,而前者其 introductionType
属性永远不会为 "wasm"
。
每个 Debugger 实例都有一个独立的 Debugger.Source
实例集合,表示已提交给系统的源代码。
调试器可以在 Debugger.Source
实例上放置其自身的属性,以存储有关特定源代码块的元数据。
JavaScript 的 Debugger.Source¶
对于表示 JavaScript 源代码块的 Debugger.Source
实例,其属性以字符串形式提供源代码本身,并描述其来源。每个 Debugger.Script 实例都引用保存其生成的源代码的 Debugger.Source
实例。
如果单个源代码块包含顶级代码和函数定义,也许还有嵌套函数,那么所有这些函数的 Debugger.Script 实例都引用同一个 Debugger.Source
实例。每个脚本都指示其对应的整体源代码的子字符串。
一个 Debugger.Source
实例可能只表示较大源文档的一部分。例如,HTML 文档可以在多个 <script>
元素和事件处理程序内容属性中包含 JavaScript。在这种情况下,整个 HTML 文档可能只有一个 Debugger.Source
实例,每个 Debugger.Script 都引用其文档的子字符串;或者,每个 <script>
元素和属性可能都有一个单独的 Debugger.Source
实例。选择权留给实现者。
如果给定的源代码使用相同的源元数据多次提交给 JavaScript 实现,则 JavaScript 实现可能会生成一个新的 Debugger.Source
实例来表示每次提交,或者它可以使用一个 Debugger.Source
实例来表示所有提交。
WebAssembly 的 Debugger.Source¶
对于表示 WebAssembly 代码块的序列化文本的 Debugger.Source
实例,其属性以字符串形式提供序列化文本。
目前仅表示通过 new WebAssembly.Module
评估的整个模块。SpiderMonkey 为每个基础 WebAssembly 模块(每个 Debugger 实例)构建一个 Debugger.Source
。
请注意,在撰写本文时,对 WebAssembly 的支持还处于非常初期的阶段。下面许多属性返回占位符值。
约定¶
对于下面属性和方法的描述,如果属性或方法的行为在引用 JavaScript 源的实例和引用 WebAssembly 代码块的实例之间存在差异,则文本将被分成两个部分,分别以“**如果实例引用 JavaScript 源**”和“**如果实例引用 WebAssembly 代码**”为标题。如果行为没有差异,则不会出现此类强调的标题。
Debugger.Source 原型对象的访问器属性¶
一个 Debugger.Source
实例从其原型继承以下访问器属性
text
**如果实例引用 JavaScript 源**,则为 JavaScript 源代码,以字符串形式表示。该值满足 ECMAScript 标准中的
Program
、FunctionDeclaration
或FunctionExpression
产生式。**如果实例引用 WebAssembly 代码**,则为序列化文本表示形式。格式尚未在 WebAssembly 标准中指定。目前,文本是基于 s-表达式的语法。如果 Debugger 设置了
allowWasmBinarySource
属性,则文本生成会被禁用,在这种情况下将返回"[wasm]"
值。binary
**如果实例引用 WebAssembly 代码**并且 Debugger 设置了
allowWasmBinarySource
属性,则为包含 WebAssembly 字节码的 Uint8Array。url
**如果实例引用 JavaScript 源**,则为加载此脚本代码的文件名或 URL。对于由
eval
或Function
构造函数创建的脚本,这可能是一个合成的文件名,以有效的 URL 开头,后跟跟踪代码如何引入系统的信息;整个字符串不是有效的 URL。对于Function.prototype
的脚本,这是null
。源可以以下几种方式从 URL 加载URL 可能会显示为标记文本中
<script>
元素的src
属性。URL 可能会传递给
Worker
web 工作线程构造函数或 web 工作线程importScripts
函数。URL 可能是 XPCOM JavaScript 模块或下标的名称。
(请注意,传递给
eval
、Function
构造函数或类似函数的代码*不*被视为从 URL 加载;此类源的Debugger.Source
实例上的url
访问器应返回undefined
。)**如果实例引用 WebAssembly 代码**,则为调用
new WebAssembly.Module
的脚本的 URL,并在其后附加字符串"> wasm"
。sourceMapURL
**如果实例引用 JavaScript 源**,如果此源是由最小化器生成或从其他语言翻译而来,并且我们知道关联此源中的源位置和原始源中对应源位置的**源映射**文档的 URL,则此属性的值为该 URL。否则,这是
null
。(在 Web 上,翻译器可以在 JavaScript 源代码中以特殊格式的注释提供源映射 URL,或者通过承载生成的 JavaScript 的 HTTP 回复中的标头提供。)
此属性是可写的,因此您可以通过设置它来更改源映射 URL。所有引用同一源的 Debugger.Source 对象都将看到更改。设置空字符串无效,不会更改现有值。
**如果实例引用 WebAssembly 代码**,则为
null
。尝试写入此属性将抛出TypeError
。displayURL
如果脚本有特殊的
//# sourceURL
注释,如源映射规范中所述,则此属性的值包含给定的字符串。否则,这是null
。element
引用此源代码所属的 DOM 元素的 <a href=”Debugger.Object”>``Debugger.Object``</a> 实例(如果有),或者如果它不属于任何 DOM 元素,则为
undefined
。源在以下情况下属于 DOM 元素如果源是元素的文本内容(即,它在标记文本中作为
<script>
元素的主体写出),或者是由其src
属性引用的源文档,则源属于<script>
元素。如果源是事件处理程序内容属性(即,如果它在标记文本中作为属性值写出),则源属于 DOM 元素。
如果源作为字符串分配给元素的事件处理程序 IDL 属性之一,则源属于 DOM 元素。(请注意,可以将字符串和函数都分配给 DOM 元素的事件处理程序 IDL 属性。如果分配函数,则该函数的脚本的源*不*属于 DOM 元素;函数的定义必须出现在其他地方。)
(如果附加到 DOM 元素的源发生更改,则表示被取代代码的
Debugger.Source
实例仍然引用 DOM 元素;此访问器仅反映来源,而不是当前关系。)elementAttributeName
如果此源属于 DOM 元素,因为它是事件处理程序内容属性或事件处理程序 IDL 属性,则这是该属性的名称,一个字符串。否则,这是
undefined
。introductionType
**如果实例引用 JavaScript 源**,则为一个字符串,指示此源代码是如何引入系统的。此访问器返回以下值之一
"eval"
,对于传递给eval
的代码。"Function"
,对于传递给Function
构造函数的代码。"Function.prototype"
,对于Function.prototype
内部生成的代码。"Worker"
,对于通过调用 Web 工作线程构造函数加载的代码——工作线程的主脚本。"importScripts"
,对于在 web 工作线程中调用importScripts
的代码。"eventHandler"
,对于作为字符串分配给 DOM 元素的事件处理程序 IDL 属性的代码。"scriptElement"
,对于属于<script>
元素的代码。"javascriptURL"
,对于在javascript:
URL 中呈现的代码。"setTimeout"
,对于作为字符串传递给setTimeout
的代码。"setInterval"
,对于作为字符串传递给setInterval
的代码。undefined
,如果实现不知道代码是如何引入的。
**如果实例引用 WebAssembly 代码**,则为
"wasm"
。introductionScript
,introductionOffset
如果实例引用 JavaScript 源代码,并且该源代码是通过调用调试目标代码中的函数引入的,则
introductionScript
是引用包含该调用的脚本的<a href=”Debugger.Script”>``Debugger.Script``</a>实例,而introductionOffset
是在该脚本中调用的字节码偏移量。否则,这两个值都为undefined
。综合起来,这些属性指示了引入调用的位置。出于这些访问器的目的,对访问器属性的赋值被视为函数调用。因此,通过为相应的 JavaScript 属性赋值来设置 DOM 元素的事件处理程序 IDL 属性会创建一个源,其
introductionScript
和introductionOffset
引用属性赋值。由于从网页的原始 HTML 解析的
<script>
元素不是由任何脚本调用引入的,因此其源的introductionScript
和introductionOffset
访问器都返回undefined
。如果
<script>
元素被动态插入到文档中,则这些访问器引用实际导致脚本运行的调用——通常是使该元素成为文档一部分的调用。因此,它们*不*引用创建该元素的调用;将源存储为该元素的文本子节点;使该元素成为某个未插入的父节点的子节点,该父节点稍后被插入;或类似操作。虽然工作线程的主脚本是由对
Worker
或SharedWorker
的调用引入的,但这些访问器在该脚本的源上始终返回undefined
。工作线程的主脚本源和创建工作线程的调用始终位于不同的线程中,但<a href=”Debugger” title=”The Debugger object”>``Debugger``</a>本质上是单线程的工具:其调试目标必须全部在同一线程中运行。由于创建工作线程的全局对象位于不同的线程中,因此它保证不是拥有此源的<a href=”Debugger” title=”The Debugger object”>``Debugger``</a>实例的调试目标;因此,创建调用永远不会“在调试目标代码中”。将工作线程与其创建者相关联以及其他多线程调试问题超出了<a href=”Debugger” title=”The Debugger object”>``Debugger``</a>的范围。如果实例引用 WebAssembly 代码,则
introductionScript
是引用相同底层 WebAssembly 模块的<a href=”Debugger.Script”>``Debugger.Script``</a>实例。introductionOffset
为undefined
。
源元数据¶
- 生成自文件
js/src/doc/Debugger/Debugger.Source.md
- 水印
sha256:5ca245813db96628aab1c78b803355eb2aa8c575839c67eb7d7bde177898df88
- 变更集