Partager via


ICorDebugProcess6::EnableVirtualModuleSplitting, méthode

Active ou désactive le fractionnement de module virtuel.

Syntaxe

HRESULT EnableVirtualModuleSplitting(
   BOOL enableSplitting
);

Paramètres

enableSplittingtrue pour activer le fractionnement de module virtuel ; false pour le désactiver.

Notes

Avec le fractionnement de module virtuel, ICorDebug reconnaît les modules qui ont été fusionnés lors du processus de génération et les présente sous la forme d’un groupe de modules distincts plutôt qu’un seul module de grande taille. Cette opération modifie le comportement de différentes méthodes ICorDebug décrites ci-dessous.

Notes

Cette méthode est uniquement disponible avec .NET Native.

Cette méthode peut être appelée et la valeur de enableSplitting peut être modifiée à tout moment. Cela n’entraîne pas de modifications fonctionnelles avec état dans l’objet ICorDebug, seulement une modification du comportement des méthodes répertoriées dans la section Fractionnement de module virtuel et API de débogage non managées quand elles sont appelées. L'utilisation de modules virtuels entraîne une baisse des performances lors de l'appel de ces méthodes. De plus, cela peut nécessiter une mise en mémoire cache importante de métadonnées virtualisées pour implémenter correctement les API IMetaDataImport, et ces caches peuvent être conservés même après la désactivation du fractionnement de module virtuel.

Terminologie

Les termes suivants sont employés dans le cadre du fractionnement de module virtuel :

modules de conteneur ou conteneurs Les modules d’agrégation.

sous-modules ou modules virtuels Les modules trouvés dans un conteneur.

modules standard qui n’ont pas été fusionnés au moment de la génération. Ce ne sont ni des modules conteneurs ni des sous-modules.

Les modules conteneurs et les sous-modules sont représentés par des objets de l'interface ICorDebugModule. Toutefois, le comportement de l’interface diffère légèrement selon les cas, comme décrit dans la section <x-ref to section>.

Modules et assemblys

Les assemblys composés de plusieurs modules ne sont pas pris en charge dans le cadre de la fusion d'assemblys, où il existe une relation un-à-un entre un module et un assembly. Chaque objet ICorDebugModule, représentant un module conteneur ou un sous-module, est associé à un objet ICorDebugAssembly correspondant. La méthode ICorDebugModule::GetAssembly effectue une conversion du module à l’assembly. Pour effectuer la correspondance inverse, la méthode ICorDebugAssembly::EnumerateModules énumère un seul module. Comme l'assembly et le module forment ici une paire fortement couplée, les termes assembly et module sont largement interchangeables.

Différences de comportement

Les modules conteneurs présentent les comportements et caractéristiques suivants :

  • Leurs métadonnées pour tous les sous-modules constitutifs sont fusionnées.

  • Leurs noms de type peuvent être altérés.

  • La méthode ICorDebugModule::GetName retourne le chemin d’accès à un module sur le disque.

  • La méthode ICorDebugModule::GetSize retourne la taille de cette image.

  • La méthode ICorDebugAssembly3.EnumerateContainedAssemblies répertorie les sous-modules.

  • La méthode ICorDebugAssembly3.GetContainerAssembly retourne S_FALSE.

Les sous-modules présentent les comportements et caractéristiques suivants :

  • Ils comportent un jeu réduit de métadonnées qui correspond uniquement à l’assembly d’origine ayant été fusionné.

  • Les noms des métadonnées ne sont pas altérés.

  • Les jetons de métadonnées ne correspondent généralement pas aux jetons présents dans l’assembly d’origine avant sa fusion au moment de la génération.

  • La méthode ICorDebugModule::GetName retourne le nom de l’assembly, pas le chemin d’accès du fichier.

  • La méthode ICorDebugModule::GetSize retourne la taille d’origine de l’image non fusionnée.

  • La méthode ICorDebugModule3.EnumerateContainedAssemblies retourne S_FALSE.

  • La méthode ICorDebugAssembly3.GetContainerAssembly retourne le module conteneur.

Interfaces récupérées des modules

Diverses interfaces peuvent être créées ou récupérées à partir des modules. entres autres :

Ces objets sont toujours mis en cache par ICorDebug, et ont la même identité de pointeur qu’ils aient été créés ou obtenus à partir du module conteneur ou d’un sous-module. Le sous-module présente une vue filtrée de ces objets mis en cache, pas un cache distinct avec ses propres copies.

Fractionnement de module virtuel et API de débogage non managées

Le tableau suivant montre de quelle manière le fractionnement de module virtuel modifie le comportement d'autres méthodes dans l'API de débogage non managée.

Méthode enableSplitting = true enableSplitting = false
ICorDebugFunction::GetModule Retourne le sous-module dans lequel cette fonction a été initialement définie. Retourne le module conteneur dans lequel cette fonction a été fusionnée.
ICorDebugClass::GetModule Retourne le sous-module dans lequel cette classe a été initialement définie. Retourne le module conteneur dans lequel cette classe a été fusionnée.
ICorDebugModuleDebugEvent::GetModule Retourne le module conteneur qui a été chargé. Les sous-modules ne reçoivent pas d'événements de chargement, indépendamment de la valeur de ce paramètre. Retourne le module conteneur qui a été chargé.
ICorDebugAppDomain::EnumerateAssemblies Retourne une liste des sous-assemblys et des assemblys standards. La liste n'inclut pas les assemblys conteneurs. Remarque : si un assembly conteneur ne contient pas tous les symboles nécessaires, aucun de ses sous-assemblys ne sera énuméré. S'il manque des symboles dans un assembly standard, celui-ci pourra ou non être énuméré, en fonction des cas. Retourne une liste des assemblys conteneurs et des assemblys standards. La liste n'inclut pas les sous-assemblys. Remarque : s’il manque des symboles dans un assembly standard, celui-ci pourra ou non être énuméré, en fonction des cas.
ICorDebugCode::GetCode (référence au code IL uniquement) Retourne le code IL qui serait valide dans une image d’assembly avant la fusion. En particulier, les jetons de métadonnées inline doivent être des jetons TypeRef ou MemberRef quand les types référencés ne sont pas définis dans le module virtuel qui contient le code IL. Ces jetons TypeRef ou MemberRef peuvent être recherchés dans l’objet IMetaDataImport correspondant à l’objet virtuel ICorDebugModule associé. Retourne le code IL dans l’image d’assembly après la fusion.

Spécifications

Plateformes : Consultez Configuration requise.

En-tête : CorDebug.idl, CorDebug.h

Bibliothèque : CorGuids.lib

Versions de .NET Framework : Disponible depuis la version 4.6, .NET Native uniquement

Voir aussi