Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a témakör további részleteket tartalmaz a natív hibakereső objektumok JavaScript-bővítményekben való használatával kapcsolatban.
A natív hibakereső objektumok a hibakereső környezet különböző szerkezeteit és viselkedését jelölik. Az objektumok átadhatók (vagy beszerezhetők) JavaScript-bővítményekbe a hibakereső állapotának módosításához.
A Hibakereső objektum JavaScript-bővítményeiről további információt a JavaScript-bővítmények natív hibakereső objektumai című témakörben talál.
A JavaScript használatával kapcsolatos általános információkért tekintse meg a JavaScript Hibakereső szkriptkészítés című témakört.
Például JavaScript-szkriptek és -bővítmények, a hibakereső csapat egy GitHub-adattárat üzemeltet a következő helyen https://github.com/Microsoft/WinDbg-Samples: .
Objektumok hibakeresése JavaScript-bővítményekben
Natív objektumok átadása
A hibakereső objektumok többféleképpen is átadhatók vagy beszerezhetők JavaScript-bővítményekben.
- JavaScript-függvények vagy metódusok számára továbbíthatók
- Ezek lehetnek a JavaScript-prototípus példányobjektumai (például vizualizációként)
- Natív hibakereső objektumok létrehozásához tervezett gazdagépmetódusokból is visszaadhatók
- A natív hibakereső objektumok létrehozására tervezett gazdagépmetódusokból adhatók vissza.
A JavaScript-bővítménynek átadott hibakereső objektumok az ebben a szakaszban ismertetett funkciókészlettel rendelkeznek.
- Tulajdonsághozzáférés
- Előrejelzett nevek
- Natív hibakereső objektumokkal kapcsolatos speciális típusok
- További attribútumok
Tulajdonsághozzáférés
Bár vannak olyan tulajdonságok az objektumokon, amelyeket maga a JavaScript-szolgáltató helyez el, a JavaScriptbe belépő natív objektumok tulajdonságainak többségét az adatmodell biztosítja. Ez azt jelenti, hogy egy tulajdonság hozzáférése --- object.propertyName vagy object[propertyName] esetén a következő történik.
- Ha a propertyName egy olyan tulajdonság neve, amelyet maga a JavaScript-szolgáltató vetített ki az objektumra, először ezt fogja feloldani; egyébként
- Ha a propertyName az adatmodell (egy másik Vizualizáció) által az objektumra kivetített kulcs neve, akkor a rendszer ezt a nevet fogja feloldani másodikként; egyébként
- Ha a propertyName a natív objektum egyik mezőjének neve, akkor harmadikként ezt a nevet fogja feloldani; egyébként
- Ha az objektum egy mutató, akkor a mutató dereferálva lesz, és a fenti ciklus folytatódik (a dereferált objektum vetített tulajdonsága, majd egy kulcs, amelyet egy natív mező követ)
A JavaScript -- object.propertyName és object[propertyName] - tulajdonsághozzáférésének szokásos módja az objektum mögöttes natív mezőihez fog hozzáférni, akárcsak a hibakeresőn belüli "dx" parancs.
Előrejelzett nevek
A következő tulajdonságok (és metódusok) javaScriptbe írt natív objektumokra lesznek kivetítve.
| Metódus | Aláírás | Leírás |
|---|---|---|
| hostContext | Ingatlan | Egy objektumot ad vissza, amely azt a környezetet jelöli, amelyben az objektum található (a címtér, a hibakeresési cél stb.) |
| célhely | Ingatlan | Olyan objektumot ad vissza, amely absztrakciója annak, hogy az objektum hol található egy címtérben (virtuális cím, regisztráció, alregisztráció stb.) |
| cél mérete | Ingatlan | Az objektum méretét adja vissza (gyakorlatilag: sizeof(<TYPE OF OBJECT>) |
| addParentModel | .addParentModel(objekt) | Hozzáad egy új szülőmodellt (hasonló egy JavaScript-prototípushoz, de az adatmodell oldalán) az objektumhoz |
| szülőmodell eltávolítása | .removeParentModel(objektum) | Egy adott szülőmodell eltávolítása az objektumból |
| futásidejűTípusObjektum | Ingatlan | Elemzést végez az objektumon, és megpróbálja futtatókörnyezeti (leginkább származtatott) típussá alakítani |
| cél típus | Ingatlan | A JavaScript-bővítmények közvetlen hozzáféréssel rendelkeznek az alapul szolgáló nyelv típusrendszeréhez. Ezt a hozzáférést a típusobjektumok fogalma fejezi ki. További információ: Natív hibakereső objektumok a JavaScript-bővítményekben – Objektumok beírása |
Ha az objektum mutató, a következő tulajdonságok (és metódusok) lesznek kivetítve a JavaScriptbe beírt mutatóra:
| Ingatlan neve | Aláírás | Leírás |
|---|---|---|
| hozzáad | .add(value) | A mutató és a megadott érték közötti matematikai összeadás végrehajtása |
| cím | Ingatlan | A mutató címét adja vissza 64 bites sorszámú objektumként (tártípus) |
| hivatkozás feloldása | .dereference() | Halasztja az egérmutatót, és visszaadja a mögöttes objektumot |
| isNull | Ingatlan | Azt adja vissza, hogy a mutató értéke null értékű-e (0) |
Natív hibakereső objektumokkal kapcsolatos speciális típusok
Helyobjektumok
A natív objektum targetLocation tulajdonságából visszaadott helyobjektum a következő tulajdonságokat (és metódusokat) tartalmazza.
| Ingatlan neve | Aláírás | Leírás |
|---|---|---|
| hozzáad | .add(value) | Abszolút bájteltolást ad a helyhez. |
| kivon | .subtract(value) | Kivon egy abszolút bájtoffsetet a helyzetből. |
További attribútumok
Iterability
Minden olyan objektum, amelyet az adatmodell iterálhatóként értelmez (natív tömb, vagy vizualizációval rendelkezik (NatVis vagy egyéb), amely iterálhatóvá teszi), egy iterátorfüggvényt (az ES6 standard Symbol.iterator használatával indexel) helyez rá. Ez azt jelenti, hogy a következő módon iterálhat egy natív objektumot a JavaScriptben.
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++.
//
}
}
Indexelhetőség
Azokat az objektumokat, amelyek egy dimenzióban sorszámokkal (például natív tömbök) indexelhetők, a JavaScriptben a standard tulajdonsághozzáférési operátoron keresztül indexelhetők – objektum[index]. Ha egy objektum név szerint indexelhető, vagy több dimenzióban is indexelhető, a getValueAt és a setValueAt metódusok az objektumra lesznek kivetítve, hogy a JavaScript-kód használhassa az indexelőt.
function indexNative(nativeArray)
{
var first = nativeArray[0];
}
Sztringkonvertálás
Minden natív objektum, amely iStringDisplayableConcept vagy NatVis DisplayString elem támogatásán keresztül megjelenítési sztringátalakítással rendelkezik, a sztringátalakítás a szabványos JavaScript toString metóduson keresztül érhető el.
function stringifyNative(nativeObject)
{
var myString = nativeObject.toString();
}
Natív hibakereső objektumok létrehozása
Ahogy már említettük, a JavaScript-szkriptek több módon is hozzáférhetnek a natív objektumokhoz, ha több módon is átadják őket a JavaScriptbe, vagy a gazdagéptárhoz intézett hívásokon keresztül hozhatják létre őket. A következő függvényekkel natív hibakereső objektumokat hozhat létre.
| Metódus | Aláírás | Leírás |
|---|---|---|
host.getModuleSymbol |
getModuleSymbol(moduleName, symbolName, [contextInheritor]) getModuleSymbol(moduleName, symbolName, [typeName], [contextInheritor]) |
Egy adott modulon belüli globális szimbólum objektumát adja vissza. A modul neve és szimbólumneve karakterlánc. Ha a választható contextInheritor argumentum meg van adva, a modul és a szimbólum ugyanabban a környezetben (címtér, hibakeresési cél) lesz megkeresve, mint az átadott objektum. Ha az argumentum nincs megadva, a modul és a szimbólum a hibakereső aktuális környezetében lesz megkeresve. Az egyszeri tesztszkriptnek nem megfelelő JavaScript-bővítménynek mindig explicit környezetet kell megadnia. Ha az opcionális TypeName argumentumot adja meg, a rendszer feltételezi, hogy a szimbólum az átadott típus, és a szimbólum(ok)ban megjelölt típus figyelmen kívül lesz hagyva. Vegye figyelembe, hogy minden olyan hívónak, aki egy modul nyilvános szimbólumait szeretné használni, mindig explicit típusnevet kell megadnia. |
host.getModuleContainingSymbol |
getModuleContainingSymbol(location, [contextInheritor]) | A megadott címet tartalmazó szimbólumot (például függvényt vagy adatokat) adja vissza. Vegye figyelembe, hogy ez csak akkor működik, ha a modulhoz privát szimbólumok találhatók, amelyek tartalmazzák a megadott címet. Ha a választható contextInheritor argumentum meg van adva, a modul és a szimbólum ugyanabban a környezetben (címtér, hibakeresési cél) lesz megkeresve, mint az átadott objektum. Ha az argumentum nincs megadva, a modul és a szimbólum a hibakereső aktuális környezetében lesz megkeresve. Az egyszeri tesztszkriptnek nem megfelelő JavaScript-bővítménynek mindig explicit környezetet kell megadnia. |
host.createPointerObject |
createPointerObject(cím, modulNév, típusNév, [környezetÖrökítő]) |
Létrehoz egy mutatóobjektumot a megadott címen vagy helyen. A modul neve és típusa karakterlánc. Ha a választható contextInheritor argumentum meg van adva, a modul és a szimbólum ugyanabban a környezetben (címtér, hibakeresési cél) lesz megkeresve, mint az átadott objektum. Ha az argumentum nincs megadva, a modul és a szimbólum a hibakereső aktuális környezetében lesz megkeresve. Az egyszeri tesztszkriptnek nem megfelelő JavaScript-bővítménynek mindig explicit környezetet kell megadnia. |
host.createTypedObject |
createTypedObject(location, moduleName, typeName, [contextInheritor]) |
Létrehoz egy objektumot, amely egy natív típusú objektumot jelöl a hibakeresési cél címterében a megadott helyen. A modul neve és típusa karakterlánc. Ha a választható contextInheritor argumentum meg van adva, a modul és a szimbólum ugyanabban a környezetben (címtér, hibakeresési cél) lesz megkeresve, mint az átadott objektum. Ha az argumentum nincs megadva, a modul és a szimbólum a hibakereső aktuális környezetében lesz megkeresve. Az egyszeri tesztszkriptnek nem megfelelő JavaScript-bővítménynek mindig explicit környezetet kell megadnia. |
Gazdagép API-k JavaScript-bővítményekhez
A JavaScript-szolgáltató egy "host" nevű objektumot szúr be minden általa betöltött szkript globális névterébe. Ez az objektum hozzáférést biztosít a szkript kritikus funkcióihoz, valamint hozzáférést biztosít a hibakereső névteréhez. Két fázisban van beállítva.
1. fázis: A szkript végrehajtása előtt a gazdaobjektum csak azt a minimális funkcionalitáskészletet tartalmazza, amely ahhoz szükséges, hogy a szkript inicializálja magát, és regisztrálja a bővíthetőségi pontokat (gyártóként és fogyasztóként is). A gyökér- és inicializálási kód nem a hibakeresési cél állapotának megváltoztatására vagy összetett műveletek végrehajtására szolgál, ezért a gazdagép csak az initializeScript metódus visszatérése után lesz teljesen feltöltve.
2. fázis: Az initializeScript visszatérése után a gazdaobjektum fel van töltve mindennel, ami szükséges a hibakeresési célok állapotának módosításához.
Hoszt objektumszint
Néhány fontos funkció közvetlenül a gazdaobjektum alatt található. A többi alnévtérrel van elosztva. A névterek közé tartoznak a következők.
| Namespace | Leírás |
|---|---|
| diagnosztika | A szkriptkód diagnosztizálását és hibakeresését segítő funkciók |
| memória | Funkció a memória olvasásának és írásának engedélyezéséhez hibakeresési célon belül |
Gyökérszint
Közvetlenül a gazdagép objektumán belül a következő tulajdonságok, függvények és konstruktorok találhatók.
| Név | Aláírás | Jelenlegi fázis | Leírás |
|---|---|---|---|
| létrehozniPointerObjektumot | createPointerObject(cím, modulNév, típusNév, [környezetÖrökítő]) |
2 | Létrehoz egy mutatóobjektumot a megadott címen vagy helyen. A modul neve és a típus neve karakterlánc. Az opcionális contextInheritor argumentum a getModuleSymbol függvényhez hasonlóan működik. |
| createTypedObject | createTypedObject(location, moduleName, typeName, [contextInheritor]) |
2 | Létrehoz egy objektumot, amely egy natív típusú objektumot jelöl a hibakeresési cél címterében a megadott helyen. A modul neve és típusa karakterlánc. Az opcionális contextInheritor argumentum a getModuleSymbol függvényhez hasonlóan működik. |
| aktuális folyamat | Ingatlan |
2 | A hibakereső aktuális folyamatát képviselő objektumot adja vissza |
| aktuális munkamenet | Ingatlan |
2 | Az aktuális hibakeresési munkamenet során nyomon követett (melyik cél, memóriakép stb.) objektumot adja vissza. |
| jelenlegi szál | Ingatlan |
2 | A hibakereső aktuális szálát képviselő objektumot adja vissza |
| evaluateExpression | evaluateExpression(kifejezés, [contextInheritor]) |
2 | Ez hívást intéz a hibakereső gazdagéphez, hogy kiértékeljen egy kifejezést csak a hibakeresés célpontjának nyelvén. Ha a választható contextInheritor argumentum meg van adva, a kifejezés kiértékelése az argumentum környezetében (például: címtér és hibakeresési cél) történik; ellenkező esetben a hibakereső aktuális kontextusában lesz kiértékelve |
| evaluateExpressionInContext | evaluateExpressionInContext(környezet, kifejezés) |
2 | Ez meghívja a hibakeresési gazdagépet arra, hogy csak a hibakeresési cél eszköz nyelvén értékeljen ki egy kifejezést. A környezeti argumentum azt az implicit mutatót jelzi, amely a kiértékeléshez használható. A kifejezés kiértékelése a környezeti argumentum által megjelölt környezetben (például címtér és hibakeresési cél) történik. |
| getModuleSymbol | getModuleSymbol(moduleName, symbolName, [contextInheritor]) |
2 | Egy adott modulon belüli globális szimbólum objektumát adja vissza. A modul neve és szimbólumneve karakterlánc. Ha a választható contextInheritor argumentum meg van adva, a modul és a szimbólum ugyanabban a környezetben (címtér, hibakeresési cél) lesz megkeresve, mint az átadott objektum. Ha az argumentum nincs megadva, a modul és a szimbólum a hibakereső aktuális környezetében lesz megkeresve. Egy JavaScript-bővítménynek, amely nem egyszeri szkript, mindig explicit környezetet kell megadnia |
| getNamedModel | getNamedModel(modelName) |
2 | A megadott névvel regisztrált adatmodellt adja vissza. Vegye figyelembe, hogy teljesen legális, ha ezt egy még nem regisztrált névhez használja. Ezzel létrehoz egy csonkot az adott névhez, és a csonkon végzett módosítások a tényleges objektumra alkalmazódnak a regisztrációkor. |
| indexeltÉrték | new indexedValue(érték, indexek) |
2 | Egy JavaScript-iterátorból visszaadható objektum konstruktora, amely az indexek alapértelmezett készletét rendeli hozzá az iterated értékhez. Az indexek halmazát JavaScript-tömbként kell kifejezni. |
| Int64 | new Int64(érték, [highValue]) |
1 | Ez int64 típusú kódtárat hoz létre. Az egyetlen argumentumverzió bármilyen értéket felvesz, amely becsomagolható egy Int64-be (átalakítás nélkül), és ilyenbe helyezi. Ha egy nem kötelező második argumentumot ad meg, az első argumentum konvertálása az alsó 32 bitbe van csomagolva, a második argumentum konvertálása pedig a felső 32 bitbe van csomagolva. |
| namedModelParent | new namedModelParent(objektum, név) |
1 | Az objektum konstruktora, amelyet az initializeScript-ből visszaadott tömbbe szánunk, és amely JavaScript-prototípusként vagy ES6-osztályként szolgál az adott nevű adatmodell szülőkiterjesztéseként. |
| megnevezettModellRegisztráció | new namedModelRegistration(object, name) |
1 | Az inicializálásScriptből visszaadott tömbbe helyezendő objektum konstruktora, amely egy JavaScript-prototípus vagy ES6-osztály adatmodellként való regisztrálását jelenti egy ismert névvel, hogy más bővítmények is megtalálják és bővítsék |
| névtér | Ingatlan |
2 | Közvetlen hozzáférést biztosít a hibakereső gyökérnévteréhez. Elérheti például az első hibakeresési cél folyamatlistáját a host.namespace.Debugger.Sessions.First() használatával. A tulajdonságot használó folyamatok |
| registerNamedModel | registerNamedModel(objektum, modelName) |
2 | Ez egy JavaScript-prototípust vagy ES6-osztályt regisztrál adatmodellként a megadott név alatt. Az ilyen regisztráció lehetővé teszi a prototípus vagy osztály elhelyezését és kiterjesztését más szkriptekkel vagy más hibakereső bővítményekkel. Vegye figyelembe, hogy egy szkript inkább egy namedModelRegistration objektumot adjon vissza az initializeScript metódusból, ahelyett, hogy ezt imperatívan tenné. Azok a szkriptek, amelyek imperatívan módosítanak bármit, szükségszerűen rendelkezniük kell egy initializeScript-metódussal a tisztítás érdekében. |
| registerExtensionForTypeSignature | registerExtensionForTypeSignature(object, typeSignature) – Regisztrálja a kiterjesztést típus aláírás szerint. |
2 | Ez egy JavaScript-prototípust vagy ES6-osztályt regisztrál bővítményadat-modellként egy natív típushoz a megadott típusaadék alapján. Vegye figyelembe, hogy a szkriptnek ahelyett, hogy imperatívan végrehajtaná, inkább egy typeSignatureExtension objektumot kellene visszaadnia az initializeScript metódusból. Azok a szkriptek, amelyek imperatívan módosítanak bármit, szükségszerűen rendelkezniük kell egy initializeScript-metódussal a tisztítás érdekében. |
| registerPrototypeForTypeSignature – típusjeggyel rendelkező prototípus regisztrálása | registerPrototypeForTypeSignature(object, typeSignature) |
2 | Ez egy JavaScript-prototípust vagy ES6-osztályt regisztrál szabványos adatmodellként (például vizualizátorként) a megadott típuskód által leírt natív típushoz. Vegye figyelembe, hogy egy szkript inkább egy typeSignatureRegistration objektumot szeretne visszaadni az initializeScript metódusból, ahelyett, hogy ezt imperatív módban végezné el. Minden olyan szkriptre, amely minden szükséges módosítást hajt végre, szükség van egy uninitializeScriptmetódusra a törléshez. |
| parseInt64 | parseInt64(string, [radix]) |
1 | Ez a metódus a szokásos JavaScript-parseInt metódushoz hasonlóan működik, azzal a kivételrel, hogy ehelyett egy Int64-típusú kódtárat ad vissza. Ha megadja a számrendszer alapját, az elemzés a jelzett módon a 2-es, 8-as, 10-es vagy 16-os számrendszerben történik. |
| TípusAláírásKiterjesztés | new typeSignatureExtension(object, typeSignature, [moduleName], [minVersion], [maxVersion]) |
1 | Az objektum konstruktora, amelyet az initializeScript által visszaadott tömbbe kívánunk helyezni, és amely egy JavaScript-prototípus vagy egy ES6-osztály által típus aláírással leírt natív típus kiterjesztése. Az ilyen regisztráció "mezőket ad hozzá" a hibakereső bármely típusú vizualizációjához, amely illeszkedik az aláírásra, ahelyett, hogy azt teljesen átvenné. Az opcionális modulnév és -verzió korlátozhatja a regisztrációt. A verziók "1.2.3.4" stílussztringként vannak megadva. |
| típus-aláírás regisztráció | new typeSignatureRegistration(object, typeSignature, [moduleName], [minVersion], [maxVersion]) |
1 | Az initializeScript-ból visszaadott tömbbe elhelyezett objektum konstruktora, amely egy JavaScript-prototípus vagy ES6-osztály natív típusjelöléssel szembeni kanonikus regisztrációját képviseli. Az ilyen regisztráció "átveszi" a hibakereső vizualizációját bármilyen típus esetében, amely illeszkedik az aláírásra, ahelyett hogy csak kibővítené azt. Az opcionális modulnév és -verzió korlátozhatja a regisztrációt. A verziók "1.2.3.4" stílussztringként vannak megadva. |
| unregisterNamedModel | unregisterNamedModel(modelName) |
2 | Ez megszünteti az adatmodell regisztrációját a megadott név alapján történő keresésből, és visszavonja a registerNamedModel által végrehajtott műveletet |
| unregisterExtensionForTypeSignature | unregisterExtensionForTypeSignature(object, typeSignature, [moduleName], [minVersion], [maxVersion]) |
2 | Ez megszünteti egy JavaScript-prototípus vagy ES6-osztály regisztrációját attól, hogy bővítményadat-modellként szolgáljon egy natív típushoz a megadott típuslezárás szerint. Ez a registerExtensionForTypeSignature logikai visszavonása. Vegye figyelembe, hogy a szkriptnek ahelyett, hogy imperatívan végrehajtaná, inkább egy typeSignatureExtension objektumot kellene visszaadnia az initializeScript metódusból. Azok a szkriptek, amelyek imperatívan módosítanak bármit, szükségszerűen rendelkezniük kell egy initializeScript-metódussal a tisztítás érdekében. Az opcionális modulnév és -verzió korlátozhatja a regisztrációt. A verziók "1.2.3.4" stílussztringként vannak megadva. |
| unregisterPrototypeForTypeSignature | unregisterPrototypeForTypeSignature(objektum, típusAláírás, [modulNév], [minVerzió], [maxVerzió]) |
2 | Ez megszünteti egy JavaScript-prototípus vagy ES6-osztály regisztrációját attól, hogy egy natív típus kanonikus adatmodellje (például: vizualizáció) legyen, a megadott típusaaírásnak megfelelően. Ez a registerPrototypeForTypeSignature logikai visszavonása. Vegye figyelembe, hogy egy szkript inkább egy typeSignatureRegistration objektumot szeretne visszaadni az initializeScript metódusból, ahelyett, hogy ezt imperatív módban végezné el. Minden olyan szkriptre, amely minden szükséges módosítást hajt végre, szükség van egy uninitializeScript metódusra a törléshez. Az opcionális modulnév és -verzió korlátozhatja a regisztrációt. A verziók "1.2.3.4" stílussztringként vannak megadva. |
Diagnosztikai funkciók
A gazdagépobjektum diagnosztikai alnévtere a következőket tartalmazza.
| Név | Aláírás | Fázis jelen | Leírás |
|---|---|---|---|
| hibakeresési napló | debugLog(object...) | 1 | Ez egy szkriptbővítmény nyomtatási stílusának hibakeresését biztosítja. Jelenleg a debugLog kimenete a hibakereső kimeneti konzoljára lesz irányítva. Egy későbbi időpontban a tervek szerint rugalmasan irányíthatja ezt a kimenetet. MEGJEGYZÉS: Ez nem használható a felhasználói kimenet konzolra való nyomtatására. Lehet, hogy a jövőben nem lesz oda irányítva. |
Memóriafunkciók
A gazdagépobjektum memória-alnévtere a következőket tartalmazza.
| Név | Aláírás | Jelenlegi fázis | Leírás |
|---|---|---|---|
| readMemoryValues | readMemoryValues(location, numElements, [elementSize], [isSigned], [contextInheritor]) |
2 | Ez beolvassa a hibakeresési cél címteréből származó nyers értéktömböt, és egy beírt tömböt helyez a memória nézetére. A megadott hely lehet cím (64 bites érték), helyobjektum vagy natív mutató. A tömb méretét a numElements argumentum jelzi. A tömb egyes elemeinek méretét (és típusát) az opcionális Elemméret és az IsSigned argumentum adja meg. Ha nem ad meg ilyen argumentumokat, az alapértelmezett érték a bájt (aláíratlan / 1 bájt). Ha a választható contextInheritor argumentum meg van adva, a memória az argumentum által jelzett környezetben (például címtér és hibakeresési cél) lesz beolvasva; ellenkező esetben a hibakereső aktuális környezetéből lesz beolvasva. Vegye figyelembe, hogy ha ezt a módszert 8, 16 és 32 bites értékeken használja, az olvasási memória fölé gyorsan beírt nézet jelenik meg. Ha ezt a módszert 64 bites értékekre használja, akkor 64 bites kódtártípusokból álló tömb jön létre, ami jelentősen drágább! |
| readString | readString(location, [contextInheritor]) readString(location, [length], [contextInheritor]) |
2 | Ez egy keskeny (aktuális kódlap) sztringet olvas be a hibakeresési cél címteréből, UTF-16-ra alakítja át, és Az eredményt JavaScript-sztringként adja vissza. Kivételt okozhat, ha a memória nem olvasható. A megadott hely lehet cím (64 bites érték), helyobjektum vagy natív karakter. Ha a választható contextInheritor argumentum meg van adva, a memória az argumentum által jelzett környezetben (például címtér és hibakeresési cél) lesz beolvasva; ellenkező esetben a hibakereső aktuális környezetéből lesz beolvasva. Ha az opcionális hossz argumentumot adja meg, az olvasási sztring a megadott hosszúságú lesz. |
| readWideString | readWideString(location, [contextInheritor]) readWideString(location, [length], [contextInheritor]) |
2 | Ez beolvassa a hibakeresési cél címteréből egy széles (UTF-16) sztringet, és az eredményt JavaScript-sztringként adja vissza. Kivételt okozhat, ha a memória nem olvasható. A megadott hely lehet cím (64 bites érték), helyobjektum vagy natív wchar_t. Ha a választható contextInheritor argumentum meg van adva, a memória az argumentum által jelzett környezetben (például címtér és hibakeresési cél) lesz beolvasva; ellenkező esetben a hibakereső aktuális környezetéből lesz beolvasva. Ha az opcionális hossz argumentumot adja meg, az olvasási sztring a megadott hosszúságú lesz. |
Az adatmodell fogalmai a JavaScriptben
Adatmodell-leképezés
A következő adatmodell-fogalmak átalakíthatók a JavaScript számára.
| Fogalom | Natív felület | JavaScript-ekvivalens |
|---|---|---|
| Sztringkonvertálás | IStringDisplayableConcept | standard: toString(...){...} |
| Iterálhatóság | IIterableConcept | standard: [Symbol.iterator](){...} |
| Indexelhetőség | IndexelhetőKoncepció | protokoll: getDimensionality(...) / getValueAt(...) / setValueAt(...) |
| Futtatókörnyezet típusának konvertálása | IPreferredRuntimeTypeConcept | protokoll: getPreferredRuntimeTypedObject(...) |
Sztringkonvertálás
A sztringkonvertálási koncepció (IStringDisplayableConcept) közvetlenül megfelel a szabványos JavaScript toString metódusnak. Mivel minden JavaScript-objektum sztringkonvertálással rendelkezik (ha az Object.prototype máshol nem biztosítja), az adatmodellbe visszaküldött Összes JavaScript-objektum megjeleníthető sztringgé alakítható. A sztringátalakítás felülírásához egyszerűen saját toString implementálására van szükség.
class myObject
{
//
// This method will be called whenever any native code calls IStringDisplayableConcept::ToDisplayString(...)
//
toString()
{
return "This is my own string conversion!";
}
}
Iterability
Az adatmodell azon fogalma, hogy egy objektum iterálásra alkalmas-e, vagy sem, közvetlenül megfelel az ES6 protokollnak, amely meghatározza, hogy egy objektum iterálható-e. A [Symbol.iterator] metódussal rendelkező objektumok iterálónak minősülnek. Ennek megvalósítása az objektumot iterábilissá teszi.
Egy csak iterálásra alkalmas objektum implementációja az alábbiakhoz hasonló lehet.
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";
}
}
Különös figyelmet kell fordítani az iterálásra és indexelhető objektumokra, mivel az iterátorból visszaadott objektumoknak tartalmazniuk kell az indexet és az értéket egy speciális visszatérési típuson keresztül.
Iterálható és Indexelhető
Az iterálásra alkalmas és indexelhető objektumokhoz az iterátor speciális visszatérési értéke szükséges. Az iterátor az értékek visszaadása helyett indexedValue példányokat ad vissza. Az indexek tömbként lesznek átadva a második argumentumban az indexeltValue konstruktornak. Lehetnek többdimenziósak, de meg kell egyezniük az indexelő protokollban visszaadott dimenzióval.
Ez a kód egy példa implementációt mutat be.
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]);
}
}
Indexelhetőség
A JavaScripttel ellentétben az adatmodell kifejezetten megkülönbözteti a tulajdonsághozzáférést és az indexelést. Minden JavaScript-objektumnak, amely indexelhetőként szeretné megjeleníteni magát az adatmodellben, egy getDimensionality metódusból álló protokollt kell implementálnia, amely visszaadja az indexelő dimenzióját, valamint egy választható getValueAt és setValueAt metódust, amely olvasást és írást végez az objektumról a megadott indexekben. A getValueAt vagy a setValueAt metódus kihagyása elfogadható, ha az objektum csak olvasható vagy csak írható.
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;
}
}
Futtatókörnyezet típusának konvertálása
Ez csak olyan JavaScript-prototípusok/osztályok esetében releváns, amelyek típusrendszer-(natív) típusok szerint vannak regisztrálva. A hibakereső gyakran képes elemzést végezni (pl. Run-Time Típusadatok (RTTI) / v-table elemzés) az objektumok valós futtatókörnyezeti típusának meghatározásához egy kódban kifejezett statikus típusból. Egy natív típuson regisztrált adatmodell felülírhatja ezt a viselkedést az IPreferredRuntimeTypeConcept implementálásával. Hasonlóképpen, egy natív objektumon regisztrált JavaScript-osztály vagy prototípus a getPreferredRuntimeTypedObject metódusból álló protokoll implementálásával saját implementációt biztosíthat.
Vegye figyelembe, hogy bár ez a módszer technikailag bármit vissza tud adni, nem helyénvaló, ha olyasmit ad vissza, ami valójában nem futásidejű típus vagy annak származtatott típusa. Ez jelentős zavart okozhat a hibakereső felhasználói számára. Ennek a módszernek a felülírása azonban értékes lehet olyan dolgok esetében, mint a C-stílusú fejléc+objektumstílusok a megvalósításhoz stb.
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);
}
}
Lásd még:
JavaScript-bővítmények natív hibakereső objektumai
Natív hibakereső objektumok JavaScript-bővítményekben – Tervezési és tesztelési szempontok