Compartilhar via


Eventos ETW de carregador

Esses eventos coletam informações relacionadas ao carregamento e descarregamento de domínios do aplicativo, assemblies e módulos.

Todos os eventos de carregador são gerados sob a palavra-chave LoaderKeyword (0x8). Os eventos DCStart e DCEnd são gerados sob LoaderRundownKeyword (0x8) com StartRundown/EndRundown habilitado. (Para obter mais informações, consulte Palavras-chaves e níveis CLR ETW.)

Eventos de domínio do aplicativo

A tabela a seguir mostra a palavra-chave e o nível.

Palavra-chave para acionar o evento Evento Nível
LoaderKeyword (0x8) AppDomainLoad_V1 e AppDomainUnLoad_V1 Informativo (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
AppDomainDCStart_V1 Informativo (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
AppDomainDCEnd_V1 Informativo (4)

A tabela a seguir mostra as informações do evento.

Evento ID do evento Descrição
AppDomainLoad_V1 (registrado para todos os domínios do aplicativo) 156 Gerado sempre que um domínio do aplicativo é criado durante o tempo de vida de um processo.
AppDomainUnLoad_V1 157 Gerado sempre que um domínio do aplicativo é destruído durante o tempo de vida de um processo.
AppDomainDCStart_V1 157 Enumera os domínios de aplicativo durante um encerramento inicial.
AppDomainDCEnd_V1 158 Enumera os domínios de aplicativo durante um encerramento final.

A tabela a seguir mostra os dados do evento.

Nome do campo Tipo de dados Descrição
AppDomainID win:UInt64 O identificador exclusivo de um domínio do aplicativo.
AppDomainFlags win:UInt32 0x1: domínio padrão.

0x2: executável.

0x4: domínio do aplicativo, 28-31 bits: política de compartilhamento desse domínio.

0: um domínio compartilhado.
AppDomainName win:UnicodeString Nome amigável de domínio do aplicativo. Pode ser alterado durante o tempo de vida do processo.
AppDomainIndex Win:UInt32 O índice desse domínio do aplicativo.
ClrInstanceID win:UInt16 ID exclusiva da instância do CLR ou do CoreCLR.

Eventos de assembly do carregador CLR

A tabela a seguir mostra a palavra-chave e o nível.

Palavra-chave para acionar o evento Evento Nível
LoaderKeyword (0x8) AssemblyLoad e AssemblyUnload Informativo (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
AssemblyDCStart Informativo (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
AssemblyDCEnd Informativo (4)

A tabela a seguir mostra as informações do evento.

Evento ID do evento Descrição
AssemblyLoad_V1 154 Gerado quando um assembly é carregado.
AssemblyUnload_V1 155 Gerado quando um assembly é descarregado.
AssemblyDCStart_V1 155 Enumera assemblies durante um encerramento inicial.
AssemblyDCEnd_V1 156 Enumera assemblies durante um encerramento final.

A tabela a seguir mostra os dados do evento.

Nome do campo Tipo de dados Descrição
AssemblyID win:UInt64 ID exclusiva para o assembly.
AppDomainID win:UInt64 ID do domínio desse assembly.
BindingID win:UInt64 ID que identifica exclusivamente a associação do assembly.
AssemblyFlags win:UInt32 0x1: assembly de domínio neutro.

0x2: assembly dinâmico.

0x4: o assembly tem uma imagem nativa.

0x8: assembly de coleção.
AssemblyName win:UnicodeString O nome totalmente qualificado do assembly.
ClrInstanceID win:UInt16 ID exclusiva da instância do CLR ou do CoreCLR.

Eventos de módulo

A tabela a seguir mostra a palavra-chave e o nível.

Palavra-chave para acionar o evento Evento Nível
LoaderKeyword (0x8) ModuleLoad_V2 e ModuleUnload_V2 Informativo (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
ModuleDCStart_V2 Informativo (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
ModuleDCEnd_V2 Informativo (4)

A tabela a seguir mostra as informações do evento.

Evento ID do evento Descrição
ModuleLoad_V2 152 Gerado quando um módulo é carregado durante o tempo de vida de um processo.
ModuleUnload_V2 153 Gerado quando um módulo é descarregado durante o tempo de vida de um processo.
ModuleDCStart_V2 153 Enumera módulos durante um encerramento inicial.
ModuleDCEnd_V2 154 Enumera módulos durante um encerramento final.

A tabela a seguir mostra os dados do evento.

Nome do campo Tipo de dados Descrição
ModuleID win:UInt64 ID exclusiva para o módulo.
AssemblyID win:UInt64 ID do assembly em que esse módulo reside.
ModuleFlags win:UInt32 0x1: módulo de domínio neutro.

0x2: o módulo tem uma imagem nativa.

0x4: módulo dinâmico.

0x8: módulo de manifesto.
Reserved1 win:UInt32 Campo reservado.
ModuleILPath win:UnicodeString Caminho da imagem CIL (Common Intermediate Language) para o módulo ou nome do módulo dinâmico se for um assembly dinâmico (terminado em nulo).
ModuleNativePath win:UnicodeString Caminho da imagem nativa do módulo, se presente (terminado em nulo).
ClrInstanceID win:UInt16 ID exclusiva da instância do CLR ou do CoreCLR.
ManagedPdbSignature win:GUID Assinatura GUID do banco de dados de programa (PDB) gerenciado que corresponde a esse módulo. (Consulte os comentários.)
ManagedPdbAge win:UInt32 Número de idade escrito para o PDB gerenciado que corresponde a esse módulo. (Consulte os comentários.)
ManagedPdbBuildPath win:UnicodeString Caminho para o local em que o PDB gerenciado que corresponde a esse módulo foi criado. Em alguns casos, isso pode ser apenas um nome de arquivo. (Consulte os comentários.)
NativePdbSignature win:GUID Assinatura GUID do gerador de imagem nativa (NGen) PDB que corresponde a esse módulo, se aplicável. (Consulte os comentários.)
NativePdbAge win:UInt32 Número de idade escrito para o PDB do NGen que corresponde a esse módulo, se aplicável. (Consulte os comentários.)
NativePdbBuildPath win:UnicodeString Caminho para o local em que o PDB do NGen que corresponde a esse módulo foi criado, se aplicável. Em alguns casos, isso pode ser apenas um nome de arquivo. (Consulte os comentários.)

Comentários

  • Os campos que têm "Pdb" em seus nomes podem ser usados por ferramentas de criação de perfil para localizar PDBs que correspondem os módulos que foram carregados durante a sessão de criação de perfil. Os valores desses campos correspondem aos dados gravados nas seções IMAGE_DIRECTORY_ENTRY_DEBUG do módulo normalmente usado por depuradores para ajudar a localizar PDBs que correspondem aos módulos carregados.

  • Os nomes de campo que começam com "ManagedPdb" referem-se ao PDB gerenciado correspondente ao módulo CIL que foi gerado pelo compilador gerenciado (como o compilador C# ou Visual Basic). Esse PDB usa o formato PDB gerenciado e descreve como elementos do código-fonte gerenciado original, como arquivos, números de linha e nomes de símbolos, são mapeados para elementos CIL que são compilados no módulo CIL.

  • Os nomes de campo que começam com "NativePdb" se referem ao PDB NGen gerado chamando NGEN createPDB. Esse PDB usa o formato de PDB nativo e descreve como os elementos do código-fonte gerenciado original, tais como arquivos, números de linha e nomes de símbolo, são mapeados para elementos nativos que são compilados no módulo NGen.

Eventos de módulo de domínio CLR

A tabela a seguir mostra a palavra-chave e o nível.

Palavra-chave para acionar o evento Evento Nível
LoaderKeyword (0x8) DomainModuleLoad_V1 Informativo (4)
LoaderRundownKeyword (0x8) +

StartRundownKeyword
DomainModuleDCStart_V1 Informativo (4)
LoaderRundownKeyword (0x8) +

EndRundownKeyword
DomainModuleDCEnd_V1 Informativo (4)

A tabela a seguir mostra as informações do evento.

Evento ID do evento Descrição
DomainModuleLoad_V1 151 Gerado quando um módulo é carregado para um domínio do aplicativo.
DomainModuleDCStart_V1 151 Enumera os módulos carregados para um domínio do aplicativo durante um encerramento inicial e é registrado para todos os domínios de aplicativo.
DomainModuleDCEnd_V1 152 Enumera os módulos carregados para um domínio do aplicativo durante um encerramento final e é registrado para todos os domínios de aplicativo.

A tabela a seguir mostra os dados do evento.

Nome do campo Tipo de dados Descrição
ModuleID win:UInt64 Identifica o assembly ao qual este módulo pertence.
AssemblyID win:UInt64 ID do assembly em que esse módulo reside.
AppDomainID win:UInt64 ID do domínio do aplicativo no qual esse módulo é usado.
ModuleFlags win:UInt32 0x1: módulo de domínio neutro.

0x2: o módulo tem uma imagem nativa.

0x4: módulo dinâmico.

0x8: módulo de manifesto.
Reserved1 win:UInt32 Campo reservado.
ModuleILPath win:UnicodeString Caminho da imagem CIL para o módulo ou nome do módulo dinâmico se for um assembly dinâmico (terminado em nulo).
ModuleNativePath win:UnicodeString Caminho da imagem nativa do módulo, se presente (terminado em nulo).
ClrInstanceID win:UInt16 ID exclusiva da instância do CLR ou do CoreCLR.

Eventos de intervalo de módulo

A tabela a seguir mostra a palavra-chave e o nível.

Palavra-chave para acionar o evento Evento Nível
PerfTrackKeyWord) ModuleRange Informativo (4)
PerfTrackKeyWord ModuleRangeDCStart Informativo (4)
PerfTrackKeyWord ModuleRangeDCEnd Informativo (4)

A tabela a seguir mostra as informações do evento.

Evento ID do evento Descrição
ModuleRange 158 Esse evento está presente se uma imagem carregada do gerador de imagem nativa (NGen) foi otimizada com IBC e contém informações sobre as seções quentes da imagem NGen.
ModuleRangeDCStart 160 Um evento ModuleRange disparado no início de um encerramento.
ModuleRangeDCEnd 161 Um evento ModuleRange disparado no fim de um encerramento.

A tabela a seguir mostra os dados do evento.

Nome do campo Tipo de dados Descrição
ClrInstanceID win:UInt16 Identifica de modo exclusivo uma instância específica do CLR em um processo se várias instâncias do CLR estão carregadas.
ModuleID win:UInt64 Identifica o assembly ao qual este módulo pertence.
RangeBegin win:UInt32 O deslocamento do módulo que representa o início do intervalo para o tipo de intervalo especificado.
RangeSize win:UInt32 O tamanho do intervalo especificado em bytes.
RangeType win:UInt32 Um único valor, 0x4, para representar intervalos IBC frios. Esse campo poderá representar mais valores no futuro.
RangeSize1 win:UInt32 0 indica dados inválidos.
RangeBegin2 win:UnicodeString

Comentários

Se uma imagem NGen carregada em um processo do .NET Framework foi otimizada com IBC, o evento ModuleRange que contém os intervalos de acessados na imagem NGen é registrado junto com os respectivos moduleID e ClrInstanceID. Se a imagem NGen não for otimizada com IBC, esse evento não será registrado. Para determinar o nome do módulo, esse evento deve ser agrupado com os eventos ETW da carga do módulo.

O tamanho de carga para esse evento é variável. O campo Count indica o número de deslocamentos de intervalo contidos no evento. Esse evento deve ser agrupado com o evento IStart do Windows para determinar os intervalos reais. O evento de Carregamento de Imagem do Windows é registrado sempre que uma imagem é carregada e contém o endereço virtual da imagem carregada.

Eventos de intervalo do módulo são acionados em qualquer nível de ETW maior ou igual a 4 e são classificados como eventos informativos.

Confira também