CLR ETW-providrar
CLR (Common Language Runtime) har två providrar: runtime-providern och rundown-providern.
Körningsprovidern genererar händelser, beroende på vilka nyckelord (händelsekategorier) som är aktiverade. Du kan till exempel samla in inläsningshändelser genom att aktivera nyckelordet LoaderKeyword
.
Händelsespårning för Windows-händelser (ETW) loggas in i en fil som har filnamnstillägget .etl, som senare kan efterbearbetas i kommaavgränsade värdefiler (.csv) efter behov. Information om hur du konverterar .etl-filen till en .csv-fil finns i Kontrollera .NET Framework loggning.
Körningsprovidern
Körningsprovidern är den huvudsakliga CLR ETW-providern.
CLR-körningsproviderns GUID är e13c0d23-ccbc-4e12-931b-d9cc2eee27e4.
Exempel på hur du loggar och visar CLR ETW-händelser med hjälp av vanliga verktyg finns i Kontrollera .NET Framework loggning.
Förutom att använda nyckelord som LoaderKeyword
kan du behöva aktivera nyckelord för loggningshändelser som kan aktiveras för ofta. Nyckelorden StartEnumerationKeyword
EndEnumerationKeyword
och aktiverar dessa händelser och sammanfattas i CLR ETW-nyckelord och -nivåer.
Rundown-providern
Rundown-providern måste vara aktiverad för vissa särskilda användningsområden. För en majoritet av användarna bör dock körningsprovidern räcka.
CLR-rundownproviderns GUID är A669021C-C450-4609-A035-5AF59AF4DF18.
Normalt aktiveras ETW-loggning innan en process startas och loggningen stängs av när processen avslutas. Men om ETW-loggning är aktiverad medan processen körs behövs ytterligare information om processen. För symbolmatchning måste du till exempel logga metodhändelser för metoder som redan lästes in innan loggningen aktiverades.
Händelserna DCStart
och DCEnd
registrerar tillståndet för processen när datainsamlingen startades och stoppades. (Tillstånd refererar till information på hög nivå, inklusive de metoder som redan var just-in-time-kompilerade (JIT) och sammansättningar som lästes in.) Dessa två händelser kan ge information om vad som redan har hänt i processen. till exempel vilka metoder som kompilerades med JIT och så vidare.
Endast händelser med DC
, DCStart
, DCEnd
eller DCInit
i deras namn höjs under rundown-providern. Dessutom aktiveras dessa händelser endast under rundown-providern.
Förutom nyckelordsfiltren för händelser stöder rundown-providern även nyckelorden StartRundownKeyword
och EndRundownKeyword
för att tillhandahålla riktad filtrering.
Starta nedkörning
En startkörning utlöses när loggning under rundown-providern aktiveras med nyckelordet StartRundownKeyword
. Detta gör DCStart
att händelsen utlöses och samlar in systemets tillstånd. Före uppräkningens DCStartInit
början utlöses händelsen. I slutet av uppräkningen DCStartComplete
utlöses händelsen för att meddela kontrollanten att datainsamlingen avslutades normalt.
Slutkörning
En slutkörning utlöses när loggning under rundown-providern aktiveras med nyckelordet EndRundownKeyword
. Slutkörningen stoppar profilering på en process som fortsätter att köras. Händelserna DCEnd
avbildar systemets tillstånd när profilering stoppas.
Före uppräkningens DCEndInit
början utlöses händelsen. I slutet av uppräkningen DCEndComplete
utlöses händelsen för att meddela konsumenten att datainsamlingen avslutades normalt. Startkörning och slutkörning används främst för hanterad symbolmatchning. Start rundown kan ge information om adressintervall för metoder som redan har JIT-kompilerats innan profileringssessionen startades. Slutkörning kan ge information om adressintervall för alla metoder som har JIT-kompilerats när profileringen håller på att stängas av.
Slutkörning sker inte automatiskt när en profileringssession stoppas. I stället måste ett verktyg som försöker utföra hanterad symbolmatchning uttryckligen anropa en CLR-rundownprovidersession med nyckelordet EndRundownKeyword
aktiverat, precis innan profileringen stoppas.
Även om antingen startkörning eller slutkörning kan ge information om metodadressintervall för hanterad symbolmatchning rekommenderar vi att du använder nyckelordet EndRundownKeyword
(som tillhandahåller DCEnd
händelser) i stället för nyckelordet StartRundownKeyword
(som tillhandahåller DCStart
händelser). Om du använder StartRundownKeyword
sker körningen under profileringssessionen, vilket kan störa det profilerade scenariot.
ETW-datainsamling med runtime- och rundown-providers
I följande exempel visas hur du använder CLR-rundownprovidern på ett sätt som möjliggör symbolmatchning av hanterade processer med minimal påverkan, oavsett om processerna startar eller slutar i eller utanför det profilerade fönstret.
Aktivera ETW-loggning med hjälp av CLR-körningsprovidern:
xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
Loggen sparas i filen clr1.etl.
Om du vill stoppa profileringen medan processen fortsätter att köras startar du rundown-providern för att samla in
DCEnd
händelserna:xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
Detta gör det möjligt för insamling av
DCEnd
händelser att starta en rundown-session. Du kan behöva vänta 30 till 60 sekunder på att alla händelser ska samlas in. Loggen sparas i filen clr1.et2.Inaktivera all ETW-profilering:
xperf -stop clrRundown xperf -stop clr
Sammanfoga profilerna för att skapa en loggfil:
xperf -merge clr1.etl clr2.etl merged.etl
Filen merged.etl innehåller händelserna från runtime- och rundown-providersessionerna.
Ett verktyg kan köra steg 2 och 3 (starta en rundown-session och sedan avsluta profilering) i stället för att omedelbart stänga av profilering när en användare begär att profileringen ska stoppas. Ett verktyg kan också köra steg 4.