Condividi tramite


Metodo ICorDebugProcess6::EnableVirtualModuleSplitting

Abilita o disabilita la suddivisione del modulo virtuale.

Sintassi

HRESULT EnableVirtualModuleSplitting(
   BOOL enableSplitting
);

Parametri

enableSplitting true per abilitare la suddivisione dei moduli virtuali; false per disabilitarla.

Osservazioni:

La suddivisione di moduli virtuali fa sì che ICorDebug riconosca i moduli uniti durante il processo di compilazione e li presenti come gruppo di moduli separati anziché come un singolo modulo di grandi dimensioni. In questo modo viene modificato il comportamento di vari metodi ICorDebug descritti di seguito.

Annotazioni

Questo metodo è disponibile solo con .NET Native.

Questo metodo può essere chiamato e il valore di enableSplitting può essere modificato in qualsiasi momento. Non causa modifiche funzionali con stato in un oggetto ICorDebug , oltre a modificare il comportamento dei metodi elencati nella divisione del modulo virtuale e la sezione API di debug non gestite al momento della chiamata. L'uso di moduli virtuali comporta una riduzione delle prestazioni quando si chiamano tali metodi. Inoltre, potrebbe essere necessaria una memorizzazione significativa nella cache in memoria dei metadati virtualizzati per implementare correttamente le API IMetaDataImport e queste cache possono essere mantenute anche dopo la disattivazione della suddivisione del modulo virtuale.

Terminologia

Quando si descrive la suddivisione del modulo virtuale, vengono usati i termini seguenti:

moduli contenitore o contenitori Moduli di aggregazione.

moduli secondari o moduli virtuali I moduli trovati in un contenitore.

moduli regolari non uniti in fase di compilazione. Non sono né moduli contenitore né sotto-moduli.

I moduli contenitore e i moduli secondari sono rappresentati da ICorDebugModule oggetti di interfaccia. Tuttavia, il comportamento dell'interfaccia è leggermente diverso in ogni caso.

Moduli e assembly

Gli assembly multimodulo non sono supportati per gli scenari di unione di assembly, quindi esiste una relazione uno-a-uno tra un modulo e un assembly. Ogni ICorDebugModule oggetto, indipendentemente dal fatto che rappresenti un modulo contenitore o un sottomodulo, abbia un oggetto ICorDebugAssembly corrispondente. Il metodo ICorDebugModule::GetAssembly converte dal modulo all'assembly. Per eseguire il mapping nell'altra direzione, il metodo ICorDebugAssembly::EnumerateModules enumera solo 1 modulo. Poiché l'assembly e il modulo formano una coppia strettamente associata in questo caso, i termini assembly e modulo diventano in gran parte intercambiabili.

Differenze comportamentali

I moduli contenitore hanno i comportamenti e le caratteristiche seguenti:

  • I relativi metadati per tutti i moduli secondari costitutivi vengono uniti insieme.

  • I nomi dei tipi possono essere sbrogliati.

  • Il metodo ICorDebugModule::GetName restituisce il percorso di un modulo su disco.

  • Il metodo ICorDebugModule::GetSize restituisce le dimensioni dell'immagine.

  • Il metodo ICorDebugAssembly3.EnumerateContainedAssemblies elenca i moduli secondari.

  • Il metodo ICorDebugAssembly3.GetContainerAssembly restituisce S_FALSE.

I moduli secondari presentano i comportamenti e le caratteristiche seguenti:

  • Hanno un set ridotto di metadati che corrisponde solo all'assembly originale unito.

  • I nomi dei metadati non vengono sbrogliati.

  • È improbabile che i token dei metadati corrispondano ai token nell'assembly originale prima di essere uniti nel processo di compilazione.

  • Il metodo ICorDebugModule::GetName restituisce il nome dell'assembly, non un percorso di file.

  • Il metodo ICorDebugModule::GetSize restituisce le dimensioni originali dell'immagine non archiviata.

  • Il metodo ICorDebugModule3.EnumerateContainedAssemblies restituisce S_FALSE.

  • Il metodo ICorDebugAssembly3.GetContainerAssembly restituisce il modulo contenitore.

Interfacce recuperate dai moduli

È possibile creare o recuperare un'ampia gamma di interfacce dai moduli. tra cui:

Questi oggetti vengono sempre memorizzati nella cache da ICorDebug e avranno la stessa identità del puntatore indipendentemente dal fatto che siano stati creati o sottoposti a query dal modulo contenitore o da un sottomodulo. Il sottomodulo fornisce una visualizzazione filtrata di questi oggetti memorizzati nella cache, non una cache separata con le proprie copie.

Suddivisione di moduli virtuali e API di debug non gestite

La tabella seguente illustra come la suddivisione del modulo virtuale influisce sul comportamento di altri metodi nell'API di debug non gestito.

Metodo enableSplitting = true enableSplitting = false
ICorDebugFunction::GetModule Restituisce il sottomodulo in cui questa funzione è stata originariamente definita Restituisce il modulo contenitore in cui è stata unita questa funzione
ICorDebugClass::GetModule Restituisce il sottomodulo in cui è stata definita originariamente questa classe. Restituisce il modulo contenitore in cui è stata unita questa classe.
ICorDebugModuleDebugEvent::GetModule Restituisce il modulo contenitore caricato. Ai moduli secondari non vengono assegnati eventi di caricamento indipendentemente da questa impostazione. Restituisce il modulo contenitore caricato.
ICorDebugAppDomain::EnumerateAssemblies Restituisce un elenco di assembly secondari e di assembly regolari; non sono inclusi assembly di contenitori. Nota: Se manca un assembly di contenitori, nessuno dei relativi assembly secondari verrà enumerato. Se un assembly regolare non contiene simboli, potrebbe essere o meno enumerato. Restituisce un elenco di assembly del contenitore e di assembly regolari; non sono inclusi assembly secondari. Nota: Se un assembly regolare non contiene simboli, potrebbe essere o meno enumerato.
ICorDebugCode::GetCode (solo quando si fa riferimento al codice IL) Restituisce IL che sarebbe valido in un'immagine di assembly di pre-unione. In particolare, tutti i token di metadati inline saranno correttamente token TypeRef o MemberRef quando i tipi a cui si fa riferimento non sono definiti nel modulo virtuale contenente il livello di integrazione. Questi token TypeRef o MemberRef possono essere cercati nell'oggetto IMetaDataImport per l'oggetto virtuale ICorDebugModule corrispondente. Restituisce l'oggetto IL nell'immagine dell'assembly post-unione.

Requisiti

Piattaforme: Vedere Sistemi operativi supportati da .NET.

Intestazione: CorDebug.idl, CorDebug.h

Biblioteca: CorGuids.lib

Versioni di .NET: Disponibile a partire da .NET Framework 4.6

Vedere anche