Megosztás a következőn keresztül:


ICorDebugProcess6::EnableVirtualModuleSplitting metódus

Engedélyezi vagy letiltja a virtuális modulok felosztását.

Szemantika

HRESULT EnableVirtualModuleSplitting(
   BOOL enableSplitting
);

Paraméterek

enableSplitting true a virtuális modulok felosztásának engedélyezése; false tiltsa le.

Megjegyzések

A virtuális modulok felosztása miatt az ICorDebug felismeri azokat a modulokat, amelyeket a buildelési folyamat során egyesítettek, és különálló modulok csoportjaként jelenítik meg őket egyetlen nagy modul helyett. Ez megváltoztatja az alábbiakban ismertetett különböző ICorDebug metódusok viselkedését.

Megjegyzés:

Ez a metódus csak .NET natív verzióban érhető el.

Ez a metódus meghívható, és az érték enableSplitting bármikor módosítható. Ez nem okoz állapotalapú funkcionális változásokat egy ICorDebug-objektumban , kivéve a Virtuális modul felosztása és a nem felügyelt hibakeresési API-k szakaszban felsorolt metódusok viselkedését a meghívásukkor. A virtuális modulok használata teljesítménybeli büntetést von maga után, amikor meghívja ezeket a metódusokat. Emellett a virtualizált metaadatok jelentős memóriabeli gyorsítótárazására lehet szükség az IMetaDataImport API-k megfelelő implementálásához, és ezek a gyorsítótárak a virtuális modul felosztásának kikapcsolása után is megőrizhetők.

Terminológia

A virtuális modulok felosztásának leírásakor a következő kifejezések használatosak:

tárolómodulok vagy tárolók Az összesítő modulok.

almodulok vagy virtuális modulok A tárolóban található modulok.

normál modulok Olyan modulok, amelyeket a buildeléskor nem egyesítettek. Ezek sem tárolómodulok, sem almodulok.

A tárolómodulokat és az almodulokat egyaránt interfészobjektumok jelölik ICorDebugModule . Az interfész viselkedése azonban minden esetben kissé eltérő.

Modulok és szerelvények

A többmodulos szerelvények nem támogatottak a szerelvény-egyesítési forgatókönyvekben, így egy-az-egyhez kapcsolat áll fenn egy modul és egy szerelvény között. Minden ICorDebugModule objektum, függetlenül attól, hogy egy tárolómodult vagy egy almodult jelöl, rendelkezik egy megfelelő ICorDebugAssembly objektummal. Az ICorDebugModule::GetAssembly metódus átalakítja a modulból a szerelvénybe. A másik irányba való leképezéshez az ICorDebugAssembly::EnumerateModules metódus csak 1 modult sorol fel. Mivel a szerelvény és a modul ebben az esetben szorosan összekapcsolt párokat alkot, a szerelvény és a modul kifejezések nagyrészt felcserélhetők.

Viselkedésbeli különbségek

A tárolómodulok viselkedése és jellemzői a következők:

  • A rendszer egyesíti az összes összetevő almodul metaadatait.

  • Előfordulhat, hogy a típusnevük csonkolt.

  • Az ICorDebugModule::GetName metódus egy lemezen lévő modul elérési útját adja vissza.

  • Az ICorDebugModule::GetSize metódus a kép méretét adja vissza.

  • Az ICorDebugAssembly3.EnumerateContainedAssemblies metódus felsorolja az almodulokat.

  • Az ICorDebugAssembly3.GetContainerAssembly metódus eredménye S_FALSE.

Az almodulok viselkedése és jellemzői a következők:

  • Csökkentett metaadatokkal rendelkeznek, amelyek csak az egyesített eredeti szerelvénynek felelnek meg.

  • A metaadatok nevei nincsenek átfésülve.

  • A metaadat-jogkivonatok nem felelnek meg az eredeti szerelvény jogkivonatainak, mielőtt azok egyesítve lettek volna a buildelési folyamatban.

  • Az ICorDebugModule::GetName metódus a szerelvény nevét adja vissza, nem a fájl elérési útját.

  • Az ICorDebugModule::GetSize metódus az eredeti egyesített képméretet adja vissza.

  • Az ICorDebugModule3.EnumerateContainedAssemblies metódus eredménye S_FALSE.

  • Az ICorDebugAssembly3.GetContainerAssembly metódus visszaadja a tartalmazó modult.

Modulokból lekért felületek

Különböző interfészek hozhatók létre vagy kérhetők le modulokból. Ilyenek például a következők:

Ezeket az objektumokat az ICorDebug mindig gyorsítótárazza, és ugyanazzal a mutatóidentitással rendelkeznek, függetlenül attól, hogy a tárolómodulból vagy egy almodulból lettek-e létrehozva vagy lekérdezve. Az almodul szűrt nézetet biztosít ezekről a gyorsítótárazott objektumokról, nem pedig külön gyorsítótárról saját másolatokkal.

Virtuális modul felosztása és a nem felügyelt hibakeresési API-k

Az alábbi táblázat bemutatja, hogyan befolyásolja a virtuális modulok felosztása a nem felügyelt hibakeresési API más metódusainak viselkedését.

Metódus enableSplitting = true enableSplitting = false
ICorDebugFunction::GetModule Azt az almodult adja vissza, amelyet a függvény eredetileg a következőben definiált: Azt a tárolómodult adja vissza, amelybe a függvény egyesítve lett
ICorDebugClass::GetModule Azt az almodult adja vissza, amelyben az osztály eredetileg definiálva volt. Azt a tárolómodult adja vissza, amelybe az osztály egyesítve lett.
ICorDebugModuleDebugEvent::GetModule A betöltött tárolómodult adja vissza. Az almodulok e beállítástól függetlenül nem kapnak betöltési eseményeket. A betöltött tárolómodult adja vissza.
ICorDebugAppDomain::EnumerateAssemblies Az alszerelvények és a normál szerelvények listáját adja vissza; nem tartalmaz tárolószerelvényeket. Jegyzet: Ha egy tárolószerelvény nem tartalmaz szimbólumokat, a rendszer egyetlen részszerelvényét sem veszi számba. Ha egy szabályos szerelvényből hiányoznak a szimbólumok, előfordulhat, hogy nem számba vehető. A tárolószerelvények és a normál szerelvények listáját adja vissza; nem tartalmaz részszerelvényeket. Jegyzet: Ha egy szabályos szerelvényből hiányoznak a szimbólumok, előfordulhat, hogy nem számba vehető.
ICorDebugCode::GetCode (ha csak IL-kódra hivatkozik) Olyan IL értéket ad vissza, amely érvényes lenne az egyesítés előtti szerelvény rendszerképében. Pontosabban a beágyazott metaadat-jogkivonatok helyesen TypeRef vagy MemberRef jogkivonatok lesznek, ha a hivatkozott típusok nincsenek definiálva az IL-t tartalmazó virtuális modulban. Ezek a TypeRef- vagy MemberRef-jogkivonatok a megfelelő virtuális ICorDebugModule objektum IMetaDataImport objektumában tekinthetők meg. Az egyesítés utáni szerelvény lemezképének IL-ét adja vissza.

Requirements

Platformok: Lásd: .NET által támogatott operációs rendszerek.

Fejléc: CorDebug.idl, CorDebug.h

Könyvtár: CorGuids.lib

.NET-verziók: A .NET-keretrendszer 4.6 óta érhető el

Lásd még