共用方式為


JavaScript 延伸模組中的原生偵錯工具物件 - 偵錯工具物件詳細資料

本主題描述在 JavaScript 延伸模組中使用原生偵錯工具物件的其他詳細資料。

原生偵錯工具物件代表偵錯工具環境的各種建構和行為。 物件可以傳入 (或取得于) JavaScript 延伸模組中,以操作偵錯工具的狀態。

如需偵錯工具物件 JavaScript 延伸模組的相關資訊,請參閱 JavaScript 延伸模組中的原生偵錯工具物件

如需使用 JavaScript 的一般資訊,請參閱 JavaScript 偵錯工具腳本

例如 JavaScript 腳本和延伸模組,偵錯工具小組會在 裝載 https://github.com/Microsoft/WinDbg-Samples GitHub 存放庫。

JavaScript 延伸模組中的偵錯工具物件

傳遞原生物件

偵錯工具物件可以透過各種方式傳入或取得 JavaScript 延伸模組。

  • 它們可以傳遞至 JavaScript 函式或方法
  • 它們可以是 JavaScript 原型的實例物件, (為視覺化檢視,例如)
  • 您可以從設計來建立原生偵錯工具物件的主機方法傳回它們
  • 您可以從設計來建立偵錯工具原生物件的主機方法傳回它們

傳遞給 JavaScript 延伸模組的偵錯工具物件具有本節中所述的一組功能。

  • 屬性存取
  • 投影名稱
  • 與原生偵錯工具物件相關的特殊類型
  • 其他屬性

屬性存取

雖然 JavaScript 提供者本身放置於該處的物件上有一些屬性,但資料模型會提供輸入 JavaScript 之原生物件上的大部分屬性。 這表示對於屬性存取--- object.propertyName 或 object[propertyName],會發生下列情況。

  • 如果 propertyName 是 JavaScript 提供者本身投影到物件上的屬性名稱,則會先解析為這個名稱;否則
  • 如果 propertyName 是資料模型投影到物件上的索引鍵名稱, (另一個視覺化檢視) ,則會解析為這個名稱第二個;否則
  • 如果 propertyName 是原生物件的功能變數名稱,它會解析為這個名稱第三個;否則
  • 如果物件是指標,則會取值指標,而上述迴圈會繼續 (已取值物件的投影屬性,後面接著索引鍵,後面接著原生欄位)

JavaScript 中屬性存取的一般方法 -- object.propertyName 和 object[propertyName] -- 會存取物件的基礎原生欄位,就像偵錯工具內的 'dx' 命令一樣。

投影名稱

下列屬性 (和方法) 投影到輸入 JavaScript 的原生物件上。

方法 簽名 描述
hostCoNtext 屬性 傳回物件,此物件代表物件在位址空間、偵錯目標等 (內容...)
targetLocation 屬性 傳回 物件,這是物件在位址空間內的抽象概念, (虛擬位址、暫存器、子暫存器等...)
targetSize 屬性 傳回物件的大小 (有效:sizeof (TYPE OF OBJECT >) <
addParentModel .addParentModel (物件) 將新的父模型 (類似于 JavaScript 原型,但在資料模型端) 物件
removeParentModel .removeParentModel (物件) 從 物件中移除指定的父模型
runtimeTypedObject 屬性 對物件執行分析,並嘗試將它轉換成執行時間, (大部分衍生) 類型
targetType 屬性 JavaScript 延伸模組可直接存取基礎語言的類型系統。 此存取是透過型別物件的概念來表示。 如需詳細資訊,請參閱 JavaScript 延伸模組中的原生偵錯工具物件 - 類型物件

如果物件是指標,下列屬性 (和方法) 投影到進入 JavaScript 的指標上:

屬性名稱 簽名 描述
add .add (值) 執行指標與指定值之間的指標數學加法
address 屬性 傳回指標位址做為 64 位序數物件, (程式庫類型)
引用 .dereference () 取值指標並傳回基礎物件
isNull 屬性 傳回指標值是否為 nullptr (0)

與原生偵錯工具物件相關的特殊類型

位置物件

從原生物件的 targetLocation 屬性傳回的位置物件包含下列屬性 (和方法) 。

屬性名稱 簽名 描述
add .add (值) 將絕對位元組位移加入位置。
.subtract (值) 從位置減去絕對位元組位移。

其他屬性

可反覆運算性

資料模型可逐一查看的任何物件, (它是原生陣列,或是具有視覺化檢視 (NatVis,或是) 讓反覆運算) 反覆運算器函式 (透過 ES6 標準 Symbol.iterator) 放置於其中。 這表示您可以在 JavaScript 中逐一查看原生物件,如下所示。

function iterateNative(nativeObject)
{
    for (var val of nativeObject)
    {
        // 
        // val will contain each element iterated from the native object.  This would be each element of an array,
        // each element of an STL structure which is made iterable through NatVis, each element of a data structure
        // which has a JavaScript iterator accessible via [Symbol.iterator], or each element of something
        // which is made iterable via support of IIterableConcept in C/C++.
        //
    }
}

可編制索引性

透過序數 (在一個維度中可編制索引的物件,例如:原生陣列) 可透過標準屬性存取運算子 -- object[index] 在 JavaScript 中編制索引。 如果物件可依名稱編制索引,或在多個維度中可編制索引,getValueAt 和 setValueAt 方法將會投影到物件上,讓 JavaScript 程式碼可以利用索引子。

function indexNative(nativeArray)
{
    var first = nativeArray[0];
}

字串轉換

任何透過支援 IStringDisplayableConcept 或 NatVis DisplayString 元素進行顯示字串轉換的原生物件,都會透過標準 JavaScript toString 方法存取該字串轉換。

function stringifyNative(nativeObject)
{
    var myString = nativeObject.toString();
}

建立原生偵錯工具物件

如前所述,JavaScript 腳本可以透過數種方式之一傳入 JavaScript 來取得原生物件的存取權,也可以透過呼叫主機程式庫來建立它們。 使用下列函式來建立原生偵錯工具物件。

方法 簽名 描述

host.getModuleSymbol

getModuleSymbol (moduleName, symbolName, [coNtextInheritor])

getModuleSymbol (moduleName, symbolName, [typeName], [coNtextInheritor])

傳回特定模組內全域符號的 物件。 模組名稱和符號名稱是字串。

如果提供選擇性 coNtextInheritor 引數,模組和符號將會在相同的內容中查閱 (位址空間,偵錯目標) 做為傳遞的物件。 如果未提供引數,模組和符號將會在偵錯工具的目前內容中查閱。 不是一次性測試腳本的 JavaScript 延伸模組應該一律提供明確的內容。

如果提供選擇性 typeName 引數,則會假設符號為傳遞的類型,而且將忽略符號 (s) 中所指出的類型。 請注意,任何預期在模組的公用符號上運作的呼叫端都應該一律提供明確的類型名稱。

host.getModuleContainingSymbol

getModuleContainingSymbol (location, [coNtextInheritor])

傳回符號 (,例如:函式或包含指定位址的資料) 。 請注意,只有在包含指定位址的模組有 私人 符號時,才會運作。

如果提供選擇性 coNtextInheritor 引數,模組和符號將會在相同的內容中查閱 (位址空間,偵錯目標) 做為傳遞的物件。 如果未提供引數,模組和符號將會在偵錯工具的目前內容中查閱。 不是一次性測試腳本的 JavaScript 延伸模組應該一律提供明確的內容。

host.createPointerObject

createPointerObject (address, moduleName, typeName, [coNtextInheritor])

在指定的位址或位置建立指標物件。 模組名稱和類型名稱是字串。

如果提供選擇性 coNtextInheritor 引數,模組和符號將會在相同的內容中查閱 (位址空間,偵錯目標) 做為傳遞的物件。 如果未提供引數,模組和符號將會在偵錯工具的目前內容中查閱。 不是一次性測試腳本的 JavaScript 延伸模組應該一律提供明確的內容。

host.createTypedObject

createTypedObject (location, moduleName, typeName, [coNtextInheritor])

建立 物件,此物件代表指定位置之偵錯目標位址空間內的原生型別物件。 模組名稱和類型名稱是字串。

如果提供選擇性 coNtextInheritor 引數,模組和符號將會在相同的內容中查閱 (位址空間,偵錯目標) 做為傳遞的物件。 如果未提供引數,模組和符號將會在偵錯工具的目前內容中查閱。 不是一次性測試腳本的 JavaScript 延伸模組應該一律提供明確的內容。

適用于 JavaScript 延伸模組的主機 API

JavaScript 提供者會將名為 host 的物件插入其載入之每個腳本的全域命名空間。 這個物件可讓您存取腳本的重要功能,以及存取偵錯工具的命名空間。 它會在兩個階段中設定。

  • 階段 1:在任何腳本執行之前,主機物件只會包含腳本初始化本身所需的最小功能集,並註冊其擴充點, (產生者和取用者) 。 根和初始化程式碼並非用來操作偵錯目標的狀態,或執行複雜的作業,因此主機在 initializeScript 方法傳回之後才會完全填入。

  • 階段 2:初始化Script 傳回之後,主機物件會填入操作偵錯目標狀態所需的一切。

主機物件層級

一些重要的功能片段會直接位於主機物件底下。 其餘部分是子命名空間。 命名空間包括下列專案。

命名空間 描述
診斷 協助診斷和偵錯腳本程式碼的功能
記憶體 啟用偵錯目標內記憶體讀取和寫入的功能

根層級

直接在主機物件內,可以找到下列屬性、方法和建構函式。

名稱 簽章 階段呈現 描述
createPointerObject

createPointerObject (address, moduleName, typeName, [coNtextInheritor])

2 在指定的位址或位置建立指標物件。 模組名稱和類型名稱是字串。 選擇性 coNtextInheritor 引數的運作方式與 getModuleSymbol 一樣。
createTypedObject

createTypedObject (location, moduleName, typeName, [coNtextInheritor])

2 建立 物件,此物件代表指定位置之偵錯目標位址空間內的原生型別物件。 模組名稱和類型名稱是字串。 選擇性 coNtextInheritor 引數的運作方式與 getModuleSymbol 一樣。
currentProcess

屬性

2 傳回 物件,此物件表示偵錯工具的目前進程
currentSession

屬性

2 傳回 物件,此物件代表偵錯工具的目前會話, (正在偵錯的目標、傾印等...)
currentThread

屬性

2 傳回 物件,代表偵錯工具的目前線程
evaluateExpression

evaluateExpression (運算式[coNtextInheritor])

2 這會呼叫偵錯主機,只使用偵錯目標的語言來評估運算式。 如果提供選擇性 coNtextInheritor 引數,則會在內容 (評估運算式,例如:引數的位址空間和偵錯目標) ;否則,它會在偵錯工具的目前內容中進行評估
evaluateExpressionInCoNtext

evaluateExpressionInCoNtext (coNtext, expression)

2 這會呼叫偵錯主機,只使用偵錯目標的語言來評估運算式。 coNtext 引數表示要用於評估的隱含這個指標。 運算式會在內容 (例如:位址空間和偵錯目標) 內容 引數所表示。
getModuleSymbol

getModuleSymbol (moduleName, symbolName, [coNtextInheritor])

2 傳回特定模組內全域符號的 物件。 模組名稱和符號名稱是字串。 如果提供選擇性 coNtextInheritor 引數,模組和符號將會在相同的內容中查閱 (位址空間,偵錯目標) 做為傳遞的物件。 如果未提供引數,模組和符號將會在偵錯工具的目前內容中查閱。 不是一次性腳本的 JavaScript 延伸模組應該一律提供明確的內容
getNamedModel

getNamedModel (modelName)

2 傳回針對指定名稱註冊的資料模型。 請注意,針對尚未註冊的名稱呼叫此專案是完全合法的。 這麼做會針對該存根建立存根,並在註冊時對實際物件進行操作
indexedValue

新的 indexedValue (值、索引)

2 物件的建構函式,可從 JavaScript 反覆運算器傳回,以便將預設索引集指派給反覆運算值。 索引集必須以 JavaScript 陣列表示。
Int64

new Int64 (value, [highValue])

1 這會建構程式庫 Int64 類型。 單一引數版本會採用任何可封裝到 Int64 (的值,而不需轉換) ,並將其放入其中。 如果提供選擇性的第二個引數,則第一個引數的轉換會封裝成較低的 32 位,而第二個引數的轉換則會封裝成前 32 位。
namedModelParent

new namedModelParent (object, name)

1 要放在 從 initializeScript傳回之陣列中之物件的建構函式,這代表使用 JavaScript 原型或 ES6 類別做為具有指定名稱之資料模型的資料模型父延伸模組
namedModelRegistration

new namedModelRegistration (object, name)

1 要放在 從 initializeScript傳回之陣列中之物件的建構函式,這代表透過已知名稱將 JavaScript 原型或 ES6 類別註冊為資料模型,讓其他延伸模組可以尋找並擴充
命名空間

屬性

2 提供偵錯工具根命名空間的直接存取權。 例如,您可以透過 host.namespace.Debugger.Sessions.First () 存取第一個偵錯目標的進程清單。使用此屬性的進程
registerNamedModel

registerNamedModel (物件 modelName)

2 這會將 JavaScript 原型或 ES6 類別註冊為指定名稱下的資料模型。 這類註冊可讓原型或類別被其他腳本或其他偵錯工具延伸模組找到並擴充。 請注意,腳本應該偏好從其initializeScript方法傳回namedModelRegistration物件,而不是以命令方式執行此動作。 任何以命令方式進行變更的腳本,都必須有 initializeScript 方法才能清除。
registerExtensionForTypeSignature

registerExtensionForTypeSignature (物件,typeSignature)

2 這會將 JavaScript 原型或 ES6 類別註冊為原生型別的延伸模組資料模型,如提供的型別簽章所指定。 請注意,腳本應該偏好從其initializeScript方法傳回typeSignatureExtension物件,而不是以命令方式執行此動作。 任何以命令方式進行變更的腳本,都必須有 initializeScript 方法才能清除。
registerPrototypeForTypeSignature

registerPrototypeForTypeSignature (物件,typeSignature)

2 這會將 JavaScript 原型或 ES6 類別註冊為標準資料模型, (例如:提供型別簽章所提供的原生類型視覺化檢視) 。 請注意,腳本應該偏好從其initializeScript方法傳回typeSignatureRegistration物件,而不是以命令方式執行此動作。 任何命令式變更的腳本都必須有 uninitializeScript方法,才能清除。
parseInt64

parseInt64 (string, [radix])

1 這個方法的作用類似于標準 JavaScript parseInt 方法,不同之處在于它會改為傳回程式庫 Int64 類型。 如果提供弧度,則會依照指示,在基底 2、8、10 或 16 中發生剖析。
typeSignatureExtension

new typeSignatureExtension (object, typeSignature, [moduleName], [minVersion], [maxVersion])

1 要放置在 initializeScript 所傳回之陣列中之物件的建構函式,這代表 JavaScript原型或 ES6 類別透過類型簽章所描述之原生類型的延伸。 這類註冊會將欄位新增至偵錯工具的視覺效果,其符合簽章,而不是完全接管。 選擇性的模組名稱和版本可以限制註冊。 版本會指定為 「1.2.3.4」 樣式字串。
typeSignatureRegistration

new typeSignatureRegistration (object, typeSignature, [moduleName], [minVersion], [maxVersion])

1 物件要放在 從 initializeScript傳回之陣列中的建構函式,這代表針對原生類型簽章的 JavaScript 原型或 ES6 類別的正式註冊。 這類註冊會「接管」偵錯工具的任何類型視覺效果,其符合簽章,而不只是擴充簽章。 選擇性的模組名稱和版本可以限制註冊。 版本會指定為 「1.2.3.4」 樣式字串。
unregisterNamedModel

unregisterNamedModel (modelName)

2 這會取消註冊由指定名稱查閱的資料模型,復原registerNamedModel所執行的任何作業
unregisterExtensionForTypeSignature

unregisterExtensionForTypeSignature (object, typeSignature, [moduleName], [minVersion], [maxVersion])

2 這會取消註冊 JavaScript 原型或 ES6 類別,而無法作為原生類型的延伸模組資料模型,如提供的型別簽章所指定。 這是 registerExtensionForTypeSignature 的邏輯復原。 請注意,腳本應該偏好從其initializeScript方法傳回typeSignatureExtension物件,而不是以命令方式執行此動作。 任何以命令方式進行變更的腳本,都必須有 initializeScript 方法才能清除。 選擇性的模組名稱和版本可以限制註冊。 版本會指定為 「1.2.3.4」 樣式字串。
unregisterPrototypeForTypeSignature

unregisterPrototypeForTypeSignature (object, typeSignature, [moduleName], [minVersion], [maxVersion])

2 這樣會取消註冊 JavaScript 原型或 ES6 類別,而無法成為標準資料模型, (例如:提供型別簽章所指定原生類型的視覺化檢視) 。 這是 registerPrototypeForTypeSignature 的邏輯復原。 請注意,腳本應該偏好從其initializeScript方法傳回typeSignatureRegistration物件,而不是以命令方式執行此動作。 任何命令式變更的腳本都必須有 uninitializeScript 方法,才能清除。 選擇性的模組名稱和版本可以限制註冊。 版本會指定為 「1.2.3.4」 樣式字串。

診斷功能

主機物件的診斷子命名空間包含下列專案。

名稱 簽章 階段呈現 描述
debugLog debugLog (物件...) 1 這會提供腳本延伸模組的 printf 樣式偵錯。 目前,debugLog 的輸出會路由傳送至偵錯工具的輸出主控台。 在稍後的時間點,有計劃提供此輸出路由的彈性。 注意:這不應該用來做為將使用者輸出列印到主控台的方法。 未來可能不會將它路由傳送到該處。

記憶體功能

主機物件的記憶體子命名空間包含下列專案。

名稱 簽章 階段呈現 描述
readMemoryValues

readMemoryValues (location, numElements, [elementSize], [isSigned], [coNtextInheritor])

2 這會從偵錯目標的位址空間讀取原始值陣列,並將具型別陣列放在此記憶體檢視的上方。 提供的位置可以是位址 (64 位值) 、位置物件或原生指標。 陣列的大小是以 numElements 引數表示。 陣列中每個元素的大小 (和類型) 是由選擇性 elementSizeisSigned 引數所指定。 如果未提供這類引數,則預設值為位元組 (不帶正負號/1 位元組) 。 如果提供選擇性 coNtextInheritor 引數,則會在內容中讀取記憶體 (例如:引數所指示的位址空間和偵錯目標) ;否則,它會從偵錯工具的目前內容讀取。 請注意,在 8、16 和 32 位值上使用這個方法會導致將快速型別檢視放在讀取記憶體上。 在 64 位值上使用這個方法會導致建構 64 位程式庫類型的陣列,其成本明顯更高!
readString

readString (位置[coNtextInheritor])

readString (location, [length], [coNtextInheritor])

2 這會從偵錯目標的位址空間讀取窄 (目前的字碼頁) 字串、將它轉換成 UTF-16,並以 JavaScript 字串傳回結果。 如果無法讀取記憶體,它可能會擲回例外狀況。 提供的位置可以是位址 (64 位值) 、位置物件或原生字元 。 如果提供選擇性 coNtextInheritor 引數,則會在內容中讀取記憶體 (例如:引數所指示的位址空間和偵錯目標) ;否則,它會從偵錯工具的目前內容讀取。 如果提供選擇性 的 length 引數,讀取字串將會是指定的長度。
readWideString

readWideString (location, [coNtextInheritor])

readWideString (location, [length], [coNtextInheritor])

2 這會從偵錯目標的位址空間讀取寬 (UTF-16) 字串,並以 JavaScript 字串傳回結果。 如果無法讀取記憶體,它可能會擲回例外狀況。 提供的位置可以是位址 (64 位值) 、位置物件或原生wchar_t 。 如果提供選擇性 coNtextInheritor 引數,則會在內容中讀取記憶體 (例如:引數所指示的位址空間和偵錯目標) ;否則,它會從偵錯工具的目前內容讀取。 如果提供選擇性 的 length 引數,讀取字串將會是指定的長度。

JavaScript 中的資料模型概念

資料模型對應

下列資料模型概念會對應至 JavaScript。

概念 原生介面 JavaScript 對等專案
字串轉換 IStringDisplayableConcept 標準:toString (...) {...}
可反覆運算性 IIterableConcept standard: [Symbol.iterator] () {...}
可編制索引性 IIndexableConcept 通訊協定:getDimensionality (...) / getValueAt (...) / setValueAt (...)
執行時間類型轉換 IPreferredRuntimeTypeConcept 通訊協定:getPreferredRuntimeTypedObject (...)

字串轉換

字串轉換概念 (IStringDisplayableConcept) 直接轉譯為標準 JavaScript toString 方法。 由於所有 JavaScript 物件都有一個字串轉換 (由 Object.prototype 提供,如果沒有在其他地方提供) ,則傳回至資料模型的每個 JavaScript 物件都可以轉換成顯示字串。 覆寫字串轉換只需要實作您自己的 toString。

class myObject
{
    //
    // This method will be called whenever any native code calls IStringDisplayableConcept::ToDisplayString(...)
    //
    toString()
    { 
        return "This is my own string conversion!";
    }
}

可反覆運算性

資料模型對於物件是否可反覆運算的概念,是否直接對應至物件是否可反覆運算的 ES6 通訊協定。 任何具有 [Symbol.iterator] 方法的物件都會被視為可反覆運算。 這類 的實作會使物件可反覆運算。

只有可反覆運算的物件可以有如下的實作。

class myObject
{
    //
    // This method will be called whenever any native code calls IIterableConcept::GetIterator
    //
    *[Symbol.iterator]()
    {
        yield "First Value";
        yield "Second Value";
        yield "Third Value";
    }
}

必須針對可反覆運算且可編制索引的物件提供特殊考慮,因為從反覆運算器傳回的物件必須包含索引,以及透過特殊傳回型別的值。

可反覆運算和可編制索引

可反覆運算且可編制索引的物件需要反覆運算器的特殊傳回值。 反覆運算器會產生 indexedValue 的實例,而不是產生值。 索引會以第二個引數中的陣列的形式傳遞至 indexedValue 建構函式。 它們可以是多維度,但必須符合索引子通訊協定中傳回的維度。

此程式碼示範實作的範例。

class myObject
{
    //
    // This method will be called whenever any native code calls IIterableConcept::GetIterator
    //
    *[Symbol.iterator]()
    {
        //
        // Consider this a map which mapped 42->"First Value", 99->"Second Value", and 107->"Third Value"
        //
        yield new host.indexedValue("First Value", [42]);
        yield new host.indexedValue("Second Value", [99]);
        yield new host.indexedValue("Third Value", [107]);
    }
}

可編制索引性

不同于 JavaScript,資料模型在屬性存取和編制索引之間會做出非常明確的區別。 任何想要在資料模型中呈現為可編制索引的 JavaScript 物件,都必須實作包含 getDimensionality 方法的通訊協定,此方法會傳回索引子的維度,以及一組選擇性的 getValueAt 和 setValueAt 方法,這些方法會在提供的索引處執行物件的讀取和寫入。 如果物件是唯讀或唯寫的,可以省略 getValueAt 或 setValueAt 方法

class myObject
{
    //
    // This method will be called whenever any native code calls IIndexableConcept::GetDimensionality or IIterableConcept::GetDefaultIndexDimensionality
    //
    getDimensionality()
    {
        //
        // Pretend we are a two dimensional array.
        //
        return 2;
    } 

    //
    // This method will be called whenever any native code calls IIndexableConcept::GetAt
    //
    getValueAt(row, column)
    {
        return this.__values[row * this.__columnCount + column];
    }

    //
    // This method will be called whenever any native code calls IIndexableConcept::SetAt
    //
    setValueAt(value, row, column)
    {
        this.__values[row * this.__columnCount + column] = value;
    }
}

執行時間類型轉換

這只適用于針對原生) 類型系統 (註冊的 JavaScript 原型/類別。 偵錯工具通常能夠執行分析 (,例如Run-Time類型資訊 (RTTI) / v 資料表分析) ,以從以程式碼表示的靜態類型判斷物件的真實執行時間類型。 針對原生類型註冊的資料模型可以透過 IPreferredRuntimeTypeConcept 的實作來覆寫此行為。 同樣地,針對原生物件註冊的 JavaScript 類別或原型可以透過由 getPreferredRuntimeTypedObject 方法所組成的通訊協定實作來提供自己的實作。

請注意,雖然此方法在技術上可以傳回任何專案,但它會被視為不正確的形式,以傳回不是執行時間類型或衍生型別的內容。 因此,偵錯工具的使用者可能會造成顯著的混淆。 不過,覆寫這個方法對於實作的 C 樣式標頭+物件樣式等專案而言,是寶貴的...

class myNativeModel
{
    //
    // This method will be called whenever the data model calls IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType
    //
    getPreferredRuntimeTypedObject()
    {
        var loc = this.targetLocation;

        //
        // Perform analysis...
        //
        var runtimeLoc = loc.Add(runtimeObjectOffset);
  
        return host.createTypedObject(runtimeLoc, runtimeModule, runtimeTypeName);
    }
}

另請參閱

JavaScript 延伸模組中的原生偵錯工具物件

JavaScript 延伸模組中的原生偵錯工具物件 - 設計和測試考慮

JavaScript 偵錯工具腳本

JavaScript 偵錯工具範例腳本