Partager via


ICorDebugProcess6 ::EnableVirtualModuleSplitting, méthode

Active ou désactive le fractionnement de module virtuel.

Syntaxe

HRESULT EnableVirtualModuleSplitting(
   BOOL enableSplitting
);

Paramètres

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

Remarques

Le fractionnement de module virtuel entraîne la reconnaissance des modules fusionnés pendant le processus de génération et les présente sous la forme d’un groupe de modules distincts plutôt qu’un seul module volumineux. Cela modifie le comportement des différentes méthodes ICorDebug décrites ci-dessous.

Note

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

Cette méthode peut être appelée et la valeur de celle-ci enableSplitting peut être modifiée à tout moment. Elle n’entraîne aucune modification fonctionnelle avec état dans un objet ICorDebug , autre que la modification du comportement des méthodes répertoriées dans le fractionnement du module virtuel et la section API de débogage non managées au moment où elles sont appelées. L’utilisation de modules virtuels entraîne une pénalité de performances lors de l’appel de ces méthodes. En outre, une mise en cache en mémoire importante des métadonnées virtualisées peut être nécessaire pour implémenter correctement les API IMetaDataImport , et ces caches peuvent être conservés même après la désactivation du fractionnement du module virtuel.

Terminologie

Les termes suivants sont utilisés lors de la description 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. Il ne s’agit ni de modules de conteneur ni de sous-modules.

Les modules de conteneur et les sous-modules sont représentés par ICorDebugModule des objets d’interface. Toutefois, le comportement de l’interface est légèrement différent dans chaque cas.

Modules et assemblys

Les assemblys multimodèles ne sont pas pris en charge pour les scénarios de fusion d’assembly. Il existe donc une relation un-à-un entre un module et un assembly. Chaque ICorDebugModule objet, qu’il représente un module conteneur ou un sous-module, possède un objet ICorDebugAssembly correspondant. La méthode ICorDebugModule ::GetAssembly convertit du module en assembly. Pour mapper dans l’autre sens, la méthode ICorDebugAssembly ::EnumerateModules énumère uniquement 1 module. Étant donné que l’assembly et le module forment une paire étroitement couplée dans ce cas, les termes assembly et module deviennent largement interchangeables.

Différences comportementales

Les modules de conteneur ont les comportements et caractéristiques suivants :

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

  • Leurs noms de type peuvent être mis en bascule.

  • La méthode ICorDebugModule ::GetName retourne le chemin d’accès à un module sur 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 ont les comportements et caractéristiques suivants :

  • Ils ont un ensemble réduit de métadonnées qui correspond uniquement à l’assembly d’origine qui a été fusionné.

  • Les noms de métadonnées ne sont pas mangles.

  • Les jetons de métadonnées ne correspondent pas aux jetons de l’assembly d’origine avant qu’ils ne soient fusionnés dans le processus de génération.

  • La méthode ICorDebugModule ::GetName retourne le nom de l’assembly, et non un chemin d’accès au fichier.

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

  • La méthode ICorDebugModule3.EnumerateContainedAssemblies retourne S_FALSE.

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

Interfaces récupérées à partir de modules

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

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

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

Le tableau suivant montre comment le fractionnement de module virtuel affecte 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é définie à l’origine dans Retourne le module conteneur dans lequel cette fonction a été fusionnée
ICorDebugClass ::GetModule Retourne le sous-module dans lequel cette classe a été définie à l’origine. 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, quel que soit ce paramètre. Retourne le module conteneur qui a été chargé.
ICorDebugAppDomain ::EnumerateAssemblies Retourne une liste de sous-assemblys et d’assemblys réguliers ; aucun assembly de conteneur n’est inclus. Note: Si un assembly de conteneur est manquant, aucun de ses sous-assemblys n’est énuméré. Si un assembly normal est manquant, il peut ou non être énuméré. Retourne une liste d’assemblys de conteneur et d’assemblys réguliers ; aucun sous-assembly n’est inclus. Note: Si un assembly normal est manquant, il peut ou non être énuméré.
ICorDebugCode ::GetCode (lorsque vous faites référence au code IL uniquement) Retourne l’il qui serait valide dans une image d’assembly de pré-fusion. Plus précisément, tous les jetons de métadonnées inline seront correctement TypeRef ou MemberRef lorsque les types référencés ne sont pas définis dans le module virtuel contenant l’il. Ces jetons TypeRef ou MemberRef peuvent être recherchés dans l’objet IMetaDataImport pour l’objet virtuel ICorDebugModule correspondant. Retourne l’il dans l’image d’assembly post-fusion.

Spécifications

Plates-formes: Consultez les systèmes d’exploitation pris en charge par .NET.

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

Bibliothèque: CorGuids.lib

Versions de .NET : Disponible depuis .NET Framework 4.6

Voir aussi