Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Włącza lub wyłącza dzielenie modułów wirtualnych.
Składnia
HRESULT EnableVirtualModuleSplitting(
BOOL enableSplitting
);
Parametry
enableSplitting
true aby włączyć dzielenie modułu wirtualnego; false aby go wyłączyć.
Uwagi
Dzielenie modułów wirtualnych powoduje, że funkcja ICorDebug rozpoznaje moduły, które zostały scalone razem podczas procesu kompilacji, i przedstawia je jako grupę oddzielnych modułów, a nie pojedynczego dużego modułu. Spowoduje to zmianę zachowania różnych metod ICorDebug opisanych poniżej.
Uwaga / Notatka
Ta metoda jest dostępna tylko w przypadku platformy .NET Native.
Tę metodę można wywołać, a wartość enableSplitting można zmienić w dowolnym momencie. Nie powoduje to żadnych stanowych zmian funkcjonalnych w obiekcie ICorDebug , poza zmianą zachowania metod wymienionych w podziale modułu wirtualnego i niezarządzanych interfejsów API debugowania w momencie ich wywołania. Użycie modułów wirtualnych powoduje karę za wydajność podczas wywoływania tych metod. Ponadto do poprawnego zaimplementowania interfejsów API IMetaDataImport może być wymagane znaczne buforowanie w pamięci metadanych zwirtualizowanych, a te pamięci podręczne mogą być zachowywane nawet po wyłączeniu podziału modułu wirtualnego.
Terminologia
Podczas opisywania podziału modułu wirtualnego są używane następujące terminy:
moduły kontenerów lub kontenery Moduły agregacji.
moduły podrzędne lub moduły wirtualne Moduły znalezione w kontenerze.
moduły zwykłe, które nie zostały scalone w czasie kompilacji. Nie są to ani moduły kontenera, ani moduły podrzędne.
Zarówno moduły kontenera, jak i moduły podrzędne są reprezentowane przez ICorDebugModule obiekty interfejsu. Jednak zachowanie interfejsu jest nieco inne w każdym przypadku.
Moduły i zestawy
Zestawy wielo module nie są obsługiwane w scenariuszach scalania zestawów, dlatego istnieje relacja jeden do jednego między modułem a zestawem. Każdy ICorDebugModule obiekt, niezależnie od tego, czy reprezentuje moduł kontenera, czy pod module, ma odpowiedni obiekt ICorDebugAssembly. Metoda ICorDebugModule::GetAssembly konwertuje z modułu na zestaw. Aby zamapować w innym kierunku, metoda ICorDebugAssembly::EnumerateModules wylicza tylko 1 moduł. Ponieważ zestaw i moduł tworzą ściśle połączoną parę w tym przypadku, terminy zestawu i modułu stają się w dużej mierze zamienne.
Różnice behawioralne
Moduły kontenerów mają następujące zachowania i cechy:
Ich metadane dla wszystkich składników podrzędnych są scalane razem.
Ich nazwy typów mogą być mangled.
Metoda ICorDebugModule::GetName zwraca ścieżkę do modułu na dysku.
Metoda ICorDebugModule::GetSize zwraca rozmiar tego obrazu.
Metoda ICorDebugAssembly3.EnumerateContainedAssemblies zawiera listę modułów podrzędnych.
Metoda ICorDebugAssembly3.GetContainerAssembly zwraca wartość
S_FALSE.
Moduły podrzędne mają następujące zachowania i cechy:
Mają ograniczony zestaw metadanych, który odpowiada tylko oryginalnemu zestawowi, który został scalony.
Nazwy metadanych nie są mangled.
Tokeny metadanych są mało prawdopodobne, aby były zgodne z tokenami w oryginalnym zestawie przed scaleniem ich w procesie kompilacji.
Metoda ICorDebugModule::GetName zwraca nazwę zestawu, a nie ścieżkę pliku.
Metoda ICorDebugModule::GetSize zwraca oryginalny nieergowany rozmiar obrazu.
Metoda ICorDebugModule3.EnumerateContainedAssemblies zwraca wartość
S_FALSE.Metoda ICorDebugAssembly3.GetContainerAssembly zwraca moduł zawierający.
Interfejsy pobierane z modułów
Różne interfejsy można tworzyć lub pobierać z modułów. Oto niektóre poprawki:
Obiekt ICorDebugClass, który jest zwracany przez metodę ICorDebugModule::GetClassFromToken .
Obiekt ICorDebugAssembly, który jest zwracany przez metodę ICorDebugModule::GetAssembly .
Te obiekty są zawsze buforowane przez funkcję ICorDebug i będą miały taką samą tożsamość wskaźnika, niezależnie od tego, czy zostały utworzone, czy odpytywane z modułu kontenera, czy z modułu podrzędnego. Moduł podrzędny udostępnia filtrowany widok tych buforowanych obiektów, a nie oddzielną pamięć podręczną z własnymi kopiami.
Dzielenie modułu wirtualnego i niezarządzane interfejsy API debugowania
W poniższej tabeli pokazano, jak dzielenie modułów wirtualnych wpływa na zachowanie innych metod w niezarządzanych interfejsach API debugowania.
| Metoda | enableSplitting = true |
enableSplitting = false |
|---|---|---|
| ICorDebugFunction::GetModule | Zwraca moduł podrzędny, w ramach którego ta funkcja została pierwotnie zdefiniowana | Zwraca moduł kontenera, do którego została scalona ta funkcja |
| ICorDebugClass::GetModule | Zwraca moduł podrzędny, w ramach którego ta klasa została pierwotnie zdefiniowana. | Zwraca moduł kontenera, do którego została scalona ta klasa. |
| ICorDebugModuleDebugEvent::GetModule | Zwraca załadowany moduł kontenera. Moduły podrzędne nie mają zdarzeń ładowania niezależnie od tego ustawienia. | Zwraca załadowany moduł kontenera. |
| ICorDebugAppDomain::EnumerateAssemblies | Zwraca listę zestawów podrzędnych i zestawów regularnych; nie są uwzględniane żadne zestawy kontenerów. Nuta: Jeśli brakuje symboli zestawu kontenerów, żaden z jego zestawów podrzędnych nie zostanie wyliczony. Jeśli brakuje żadnych zwykłych symboli zestawu, może być wyliczany lub nie. | Zwraca listę zestawów kontenerów i zestawów regularnych; nie są uwzględniane żadne zestawy podrzędne. Nuta: Jeśli brakuje żadnych zwykłych symboli zestawu, może być wyliczany lub nie. |
| ICorDebugCode::GetCode (tylko podczas odwoływania się do kodu IL) | Zwraca wartość IL, która byłaby prawidłowa w obrazie zestawu wstępnego scalania. W szczególności wszystkie tokeny metadanych wbudowanych będą poprawnie tokenami TypeRef lub MemberRef, gdy typy, do których odwołuje się, nie są zdefiniowane w module wirtualnym zawierającym il. Te tokeny TypeRef lub MemberRef można wyszukać w obiekcie IMetaDataImport dla odpowiedniego obiektu wirtualnego ICorDebugModule . |
Zwraca il w obrazie zestawu po scaleniu. |
Requirements
Platformy: Zobacz Obsługiwane systemy operacyjne platformy .NET.
Nagłówek: CorDebug.idl, CorDebug.h
Biblioteka: CorGuids.lib
Wersje platformy .NET: Dostępne od programu .NET Framework 4.6