ICorDebugProcess6::EnableVirtualModuleSplitting-metod
Aktiverar eller inaktiverar delning av virtuella moduler.
Syntax
HRESULT EnableVirtualModuleSplitting(
BOOL enableSplitting
);
Parametrar
enableSplitting
true
för att aktivera delning av virtuella moduler. false
för att inaktivera den.
Kommentarer
Delning av virtuella moduler gör att ICorDebug känner igen moduler som sammanfogades under byggprocessen och presenterar dem som en grupp med separata moduler i stället för en enda stor modul. Om du gör detta ändras beteendet för olika ICorDebug-metoder som beskrivs nedan.
Kommentar
Den här metoden är endast tillgänglig med .NET Native.
Den här metoden kan anropas och värdet enableSplitting
för kan ändras när som helst. Det orsakar inga tillståndskänsliga funktionella ändringar i ett ICorDebug-objekt , förutom att ändra beteendet för de metoder som anges i avsnittet Virtuell moduldelning och ohanterade felsöknings-API:er vid den tidpunkt då de anropas. Användning av virtuella moduler medför prestandastraff när du anropar dessa metoder. Dessutom kan betydande minnesintern cachelagring av virtualiserade metadata krävas för att implementera API:erna för IMetaDataImport på rätt sätt, och dessa cacheminnen kan behållas även efter att delning av virtuella moduler har inaktiverats.
Terminologi
Följande termer används när du beskriver delning av virtuella moduler:
containermoduler eller containrar Mängdmodulerna.
undermoduler eller virtuella moduler Modulerna som finns i en container.
vanliga moduler Moduler som inte sammanfogades vid bygget. De är varken containermoduler eller undermoduler.
Både containermoduler och undermoduler representeras av ICorDebugModule-gränssnittsobjekt. Gränssnittets beteende skiljer sig dock något åt i varje enskilt fall, som <avsnittet x-ref till avsnitt> beskriver.
Moduler och sammansättningar
Sammansättningar med flera moduler stöds inte för sammansättningssammanslagningsscenarier, så det finns en en-till-en-relation mellan en modul och en sammansättning. Varje ICorDebugModule-objekt, oavsett om det representerar en containermodul eller en undermodul, har ett motsvarande ICorDebugAssembly-objekt. Metoden ICorDebugModule::GetAssembly konverterar från modulen till sammansättningen. Om du vill mappa i den andra riktningen räknar metoden ICorDebugAssembly::EnumerateModules endast upp en modul. Eftersom sammansättning och modul bildar ett nära kopplat par i det här fallet blir termerna sammansättning och modul i stort sett utbytbara.
Beteendeskillnader
Containermoduler har följande beteenden och egenskaper:
Deras metadata för alla de ingående undermodulerna sammanfogas.
Deras typnamn kan vara manglade.
Metoden ICorDebugModule::GetName returnerar sökvägen till en modul på disk.
Metoden ICorDebugModule::GetSize returnerar bildens storlek.
Metoden ICorDebugAssembly3.EnumerateContainedAssemblies listar undermodulerna.
Metoden ICorDebugAssembly3.GetContainerAssembly returnerar
S_FALSE
.
Undermoduler har följande beteenden och egenskaper:
De har en reducerad uppsättning metadata som endast motsvarar den ursprungliga sammansättning som sammanfogades.
Metadatanamnen är inte manglade.
Metadatatoken kommer sannolikt inte att matcha token i den ursprungliga sammansättningen innan de sammanfogades i byggprocessen.
Metoden ICorDebugModule::GetName returnerar sammansättningsnamnet, inte en filsökväg.
Metoden ICorDebugModule::GetSize returnerar den ursprungliga avbildningsstorleken.
Metoden ICorDebugModule3.EnumerateContainedAssemblies returnerar
S_FALSE
.Metoden ICorDebugAssembly3.GetContainerAssembly returnerar den innehållande modulen.
Gränssnitt som hämtats från moduler
En mängd olika gränssnitt kan skapas eller hämtas från moduler. Några av dessa är:
Ett ICorDebugClass-objekt som returneras av metoden ICorDebugModule::GetClassFromToken .
Ett ICorDebugAssembly-objekt som returneras av metoden ICorDebugModule::GetAssembly .
Dessa objekt cachelagras alltid av ICorDebug och de har samma pekaridentitet oavsett om de har skapats eller frågats från containermodulen eller en undermodul. Undermodulen ger en filtrerad vy över dessa cachelagrade objekt, inte en separat cache med egna kopior.
Delning av virtuell modul och ohanterade felsöknings-API:er
I följande tabell visas hur delning av virtuella moduler påverkar beteendet för andra metoder i det ohanterade felsöknings-API:et.
Metod | enableSplitting = true |
enableSplitting = false |
---|---|---|
ICorDebugFunction::GetModule | Returnerar den undermodul som den här funktionen ursprungligen definierades i | Returnerar containermodulen som den här funktionen sammanfogades till |
ICorDebugClass::GetModule | Returnerar den undermodul som den här klassen ursprungligen definierades i. | Returnerar containermodulen som den här klassen sammanfogades till. |
ICorDebugModuleDebugEvent::GetModule | Returnerar containermodulen som lästes in. Undermoduler ges inte inläsningshändelser oavsett den här inställningen. | Returnerar containermodulen som lästes in. |
ICorDebugAppDomain::EnumerateAssemblies | Returnerar en lista över undersammansättningar och vanliga sammansättningar. inga containersammansättningar ingår. Obs! Om någon containersammansättning saknar symboler räknas ingen av dess undersammansättningar upp. Om en vanlig sammansättning saknar symboler kan den räknas upp eller inte. | Returnerar en lista över containersammansättningar och vanliga sammansättningar. inga undersammansättningar ingår. Obs! Om någon vanlig sammansättning saknar symboler kan den räknas upp eller inte. |
ICorDebugCode::GetCode (endast när du refererar till IL-kod) | Returnerar IL som skulle vara giltig i en försammanfogningssammansättningsbild. Mer specifikt kommer alla infogade metadatatoken korrekt att vara TypeRef- eller MemberRef-token när de typer som hänvisas till inte definieras i den virtuella modulen som innehåller IL. Dessa TypeRef- eller MemberRef-token kan sökas upp i IMetaDataImport-objektet för motsvarande virtuella ICorDebugModule-objekt. | Returnerar IL:en i sammansättningsbilden efter sammanfogningen. |
Krav
Plattformar: Se Systemkrav.
Rubrik: CorDebug.idl, CorDebug.h
Bibliotek: CorGuids.lib
.NET Framework-versioner: Endast tillgänglig sedan 4.6, .NET Native