ICorDebugProcess6::EnableVirtualModuleSplitting – metoda
Povolí nebo zakáže rozdělení virtuálního modulu.
Syntaxe
HRESULT EnableVirtualModuleSplitting(
BOOL enableSplitting
);
Parametry
enableSplitting
true
k povolení rozdělení virtuálního modulu; false
ho zakážete.
Poznámky
Rozdělení virtuálního modulu způsobí , že ICorDebug rozpozná moduly, které byly sloučeny během procesu sestavení, a představují je jako skupinu samostatných modulů, nikoli jako jeden velký modul. Tímto způsobem se změní chování různých metod ICorDebug popsaných níže.
Poznámka:
Tato metoda je k dispozici pouze pro .NET Native.
Tuto metodu lze volat a hodnotu enableSplitting
lze kdykoli změnit. Nezpůsobí žádné stavové funkční změny v objektu ICorDebug , kromě změny chování metod uvedených v rozdělení virtuálního modulu a oddílu nespravovaných rozhraní API ladění v době, kdy jsou volány. Použití virtuálních modulů při volání těchto metod způsobuje snížení výkonu. Kromě toho může být k správné implementaci rozhraní API IMetaDataImport potřeba ukládání virtualizovaných metadat do mezipaměti v paměti a tyto mezipaměti se můžou zachovat i po vypnutí rozdělení virtuálního modulu.
Terminologie
Při popisu rozdělení virtuálního modulu se používají následující termíny:
kontejnerové moduly nebo kontejnery: Agregované moduly.
dílčí moduly nebo virtuální moduly Moduly nalezené v kontejneru.
moduly pravidelných modulů, které nebyly sloučeny v době sestavení. Nejsou to moduly kontejnerů ani dílčí moduly.
Moduly kontejneru i dílčí moduly jsou reprezentovány objekty rozhraní ICorDebugModule. Chování rozhraní se ale v každém případě mírně liší, jak <popisuje oddíl x-ref> .
Moduly a sestavení
Sestavení s více moduly nejsou podporována pro scénáře slučování sestavení, takže mezi modulem a sestavením existuje relace 1:1. Každý ICorDebugModule objekt, bez ohledu na to, zda představuje modul kontejneru nebo dílčí modul, má odpovídající ICorDebugAssembly objekt. ICorDebugModule ::GetAssembly metoda převede z modulu na sestavení. Chcete-li mapovat v opačném směru, ICorDebugAssembly::EnumerateModules metoda výčet pouze 1 modul. Vzhledem k tomu, že sestavení a modul tvoří úzce spárovaný pár v tomto případě, termíny sestavení a modul se z velké části zaměňují.
Rozdíly v chování
Moduly kontejnerů mají následující chování a vlastnosti:
Jejich metadata pro všechny základní dílčí moduly se sloučí dohromady.
Jejich názvy typů mohou být mangled.
Metoda ICorDebugModule::GetName vrátí cestu k modulu na disku.
Metoda ICorDebugModule::GetSize vrátí velikost obrázku.
Metoda ICorDebugAssembly3.EnumerateContainedAssemblies obsahuje seznam dílčích modulů.
ICorDebugAssembly3.GetContainerAssembly metoda vrátí
S_FALSE
.
Dílčí moduly mají následující chování a charakteristiky:
Mají omezenou sadu metadat, která odpovídají pouze původnímu sestavení, které bylo sloučeno.
Názvy metadat nejsou mangled.
Tokeny metadat pravděpodobně neodpovídají tokenům v původním sestavení před sloučením v procesu sestavení.
Metoda ICorDebugModule::GetName vrátí název sestavení, nikoli cestu k souboru.
Metoda ICorDebugModule::GetSize vrátí původní nesdílenou velikost obrázku.
ICorDebugModule3.EnumerateContainedAssemblies metoda vrátí
S_FALSE
.ICorDebugAssembly3.GetContainerAssembly metoda vrátí obsahující modul.
Rozhraní načtená z modulů
Z modulů je možné vytvářet nebo načítat různá rozhraní. Zde jsou některá z vylepšení:
ICorDebugClass objekt, který je vrácen ICorDebugModule::GetClassFromToken metoda.
ICorDebugAssembly objekt, který je vrácen ICorDebugModule::GetAssembly metoda.
Tyto objekty jsou vždy uloženy v mezipaměti ICorDebug a budou mít stejnou identitu ukazatele bez ohledu na to, jestli byly vytvořeny nebo dotazovány z modulu kontejneru nebo dílčího modulu. Dílčí modul poskytuje filtrované zobrazení těchto objektů uložených v mezipaměti, nikoli samostatnou mezipaměť s vlastními kopiemi.
Rozdělení virtuálního modulu a nespravovaná rozhraní API ladění
Následující tabulka ukazuje, jak rozdělení virtuálního modulu ovlivňuje chování jiných metod v nespravovaném rozhraní API ladění.
metoda | enableSplitting = true |
enableSplitting = false |
---|---|---|
ICorDebugFunction::GetModule | Vrátí dílčí modul, ve které byla tato funkce původně definována. | Vrátí modul kontejneru, do které byla tato funkce sloučena. |
ICorDebugClass::GetModule | Vrátí dílčí modul, ve které byla tato třída původně definována. | Vrátí modul kontejneru, do který byla tato třída sloučena. |
ICorDebugModuleDebugEvent::GetModule | Vrátí načtený modul kontejneru. Dílčí moduly nemají události načítání bez ohledu na toto nastavení. | Vrátí načtený modul kontejneru. |
ICorDebugAppDomain::EnumerateAssemblies | Vrátí seznam dílčích sestavení a běžných sestavení; Nejsou zahrnuta žádná sestavení kontejnerů. Poznámka: Pokud nějaké sestavení kontejneru chybí symboly, žádná z jejích dílčích sestavení se nevypíše. Pokud nějaké běžné sestavení chybí symboly, může nebo nemusí být výčtu. | Vrátí seznam sestavení kontejneru a pravidelná sestavení; Nejsou zahrnuta žádná dílčí sestavení. Poznámka: Pokud některé běžné sestavení chybí symboly, může nebo nemusí být výčtu. |
ICorDebugCode::GetCode (při odkazování pouze na kód IL) | Vrátí hodnotu IL, která by byla platná v imagi sestavení před sloučením. Konkrétně všechny vložené tokeny metadat budou správně typeRef nebo MemberRef tokeny, pokud typy, na které se odkazuje, nejsou definovány ve virtuálním modulu obsahujícím IL. Tyto tokeny TypeRef nebo MemberRef lze vyhledat v objektu IMetaDataImport pro odpovídající virtuální ICorDebugModule objekt. | Vrátí il v bitové kopii sestavení po sloučení. |
Požadavky
Platformy: Viz požadavky na systém.
Hlavička: CorDebug.idl, CorDebug.h
Knihovna: CorGuids.lib
Verze rozhraní .NET Framework: Dostupné pouze od verze 4.6, .NET Native