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.
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:
Egy ICorDebugClass objektum, amelyet az ICorDebugModule::GetClassFromToken metódus ad vissza.
Egy ICorDebugAssembly objektum, amelyet az ICorDebugModule::GetAssembly metódus ad vissza.
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