Compartir a través de


ICorDebugProcess6::EnableVirtualModuleSplitting (Método)

Habilita o deshabilita la división de módulos virtuales.

Syntax

HRESULT EnableVirtualModuleSplitting(
   BOOL enableSplitting
);

Parámetros

enableSplitting true para habilitar la división de módulos virtuales; false para deshabilitarlo.

Observaciones

La división de módulos virtuales hace que ICorDebug reconozca los módulos que se combinaron durante el proceso de compilación y los presente como un grupo de módulos independientes en lugar de un único módulo grande. Esto cambia el comportamiento de varios métodos ICorDebug que se describen a continuación.

Nota:

Este método solo está disponible con .NET Native.

Se puede llamar a este método y el valor de enableSplitting se puede cambiar en cualquier momento. No produce ningún cambio funcional con estado en un objeto ICorDebug , aparte de modificar el comportamiento de los métodos enumerados en la división de módulos virtuales y la sección API de depuración no administradas en el momento en que se llama a ellos. El uso de módulos virtuales conlleva una penalización de rendimiento al llamar a esos métodos. Además, es posible que se requiera un almacenamiento en caché significativo en memoria de los metadatos virtualizados para implementar correctamente las API de IMetaDataImport y estas memorias caché se pueden conservar incluso después de que se haya desactivado la división de módulos virtuales.

Terminología

Los términos siguientes se usan al describir la división de módulos virtuales:

módulos de contenedor o contenedores Módulos agregados.

submódulos o módulos virtuales Los módulos que se encuentran en un contenedor.

módulos normales Módulos que no se combinaron en tiempo de compilación. No son módulos de contenedor ni submódulos.

Tanto los módulos de contenedor como los submódulos se representan mediante ICorDebugModule objetos de interfaz. Sin embargo, el comportamiento de la interfaz es ligeramente diferente en cada caso.

Módulos y ensamblados

Los ensamblados de varios módulos no se admiten para escenarios de combinación de ensamblados, por lo que hay una relación uno a uno entre un módulo y un ensamblado. Cada ICorDebugModule objeto, independientemente de si representa un módulo contenedor o un submódulo, tiene un objeto ICorDebugAssembly correspondiente. El método ICorDebugModule::GetAssembly convierte del módulo al ensamblado. Para asignar en la otra dirección, el método ICorDebugAssembly::EnumerateModules enumera solo 1 módulo. Dado que el ensamblado y el módulo forman un par estrechamente acoplado en este caso, los términos ensamblado y módulo se vuelven en gran medida intercambiables.

Diferencias de comportamiento

Los módulos de contenedor tienen los siguientes comportamientos y características:

  • Sus metadatos para todos los submódulos constituyentes se combinan juntos.

  • Sus nombres de tipo pueden ser mangledados.

  • El método ICorDebugModule::GetName devuelve la ruta de acceso a un módulo en disco.

  • El método ICorDebugModule::GetSize devuelve el tamaño de esa imagen.

  • El método ICorDebugAssembly3.EnumerateContainedAssemblies enumera los submódulos.

  • El método ICorDebugAssembly3.GetContainerAssembly devuelve S_FALSE.

Los submódulos tienen los siguientes comportamientos y características:

  • Tienen un conjunto reducido de metadatos que solo corresponde al ensamblado original que se combinó.

  • Los nombres de los metadatos no se administran.

  • Es poco probable que los tokens de metadatos coincidan con los tokens del ensamblado original antes de combinarlos en el proceso de compilación.

  • El método ICorDebugModule::GetName devuelve el nombre del ensamblado, no una ruta de acceso de archivo.

  • El método ICorDebugModule::GetSize devuelve el tamaño de imagen no combinado original.

  • El método ICorDebugModule3.EnumerateContainedAssemblies devuelve S_FALSE.

  • El método ICorDebugAssembly3.GetContainerAssembly devuelve el módulo contenedor.

Interfaces recuperadas de módulos

Se pueden crear o recuperar una variedad de interfaces de los módulos. Algunos son:

ICorDebug almacena siempre en caché estos objetos y tendrán la misma identidad de puntero independientemente de si se crearon o consultaron desde el módulo contenedor o un submódulo. El submódulo proporciona una vista filtrada de estos objetos almacenados en caché, no una caché independiente con sus propias copias.

División de módulos virtuales y las API de depuración no administradas

En la tabla siguiente se muestra cómo la división de módulos virtuales afecta al comportamiento de otros métodos en la API de depuración no administrada.

Método enableSplitting = true enableSplitting = false
ICorDebugFunction::GetModule Devuelve el submódulo en el que se definió originalmente esta función. Devuelve el módulo contenedor en el que se combinó esta función.
ICorDebugClass::GetModule Devuelve el submódulo en el que se definió originalmente esta clase. Devuelve el módulo contenedor en el que se combinó esta clase.
ICorDebugModuleDebugEvent::GetModule Devuelve el módulo de contenedor que se cargó. Los submódulos no reciben eventos de carga independientemente de esta configuración. Devuelve el módulo de contenedor que se cargó.
ICorDebugAppDomain::EnumerateAssemblies Devuelve una lista de subensamblajes y ensamblados normales; no se incluyen ensamblados de contenedor. Nota: Si falta algún ensamblado de contenedor, no se enumerará ninguno de sus subensamblajes. Si falta algún ensamblado normal, puede o no enumerarse. Devuelve una lista de ensamblados de contenedor y ensamblados normales; no se incluye ningún subensamblaje. Nota: Si falta algún ensamblado normal, puede o no enumerarse.
ICorDebugCode::GetCode (solo al hacer referencia al código IL) Devuelve IL que sería válido en una imagen de ensamblado de combinación previa. En concreto, los tokens de metadatos insertados serán correctamente Los tokens TypeRef o MemberRef cuando los tipos a los que se hace referencia no se definen en el módulo virtual que contiene el IL. Estos tokens TypeRef o MemberRef se pueden buscar en el objeto IMetaDataImport para el objeto virtual ICorDebugModule correspondiente. Devuelve el IL en la imagen de ensamblado posterior a la combinación.

Requisitos

Plataformas: Consulte Sistemas operativos compatibles con .NET.

Encabezado: CorDebug.idl, CorDebug.h

Biblioteca: CorGuids.lib

Versiones de .NET: Disponible desde .NET Framework 4.6

Consulte también