Dostawcy CLR ETW
Środowisko uruchomieniowe języka wspólnego (CLR) ma dwóch dostawców: dostawcę środowiska uruchomieniowego i dostawcę uruchamiania.
Dostawca środowiska uruchomieniowego zgłasza zdarzenia w zależności od tego, które słowa kluczowe (kategorie zdarzeń) są włączone. Można na przykład zbierać zdarzenia modułu LoaderKeyword
ładującego, włączając słowo kluczowe .
Śledzenie zdarzeń systemu Windows (ETW) jest rejestrowane w pliku z rozszerzeniem etl, który można później przetworzyć po przetworzeniu w plikach wartości rozdzielanych przecinkami (.csv). Aby uzyskać informacje na temat konwertowania pliku etl na plik .csv, zobacz Kontrolowanie rejestrowania .NET Framework.
Dostawca środowiska uruchomieniowego
Dostawca środowiska uruchomieniowego jest głównym dostawcą CLR ETW.
Identyfikator GUID dostawcy środowiska uruchomieniowego CLR to e13c0d23-ccbc-4e12-931b-d9cc2ee27e4.
Aby zapoznać się z przykładami rejestrowania i wyświetlania zdarzeń CLR ETW przy użyciu powszechnie dostępnych narzędzi, zobacz Kontrolowanie rejestrowania .NET Framework.
Oprócz używania słów kluczowych, takich jak LoaderKeyword
, może być konieczne włączenie słów kluczowych dla zdarzeń rejestrowania, które mogą być wywoływane zbyt często. Słowa StartEnumerationKeyword
kluczowe i EndEnumerationKeyword
włączają te zdarzenia i są sumowane w słowach kluczowych i poziomach CLR ETW.
Dostawca rundown
Dostawca uruchamiania musi być włączony w przypadku określonych zastosowań specjalnych. Jednak w przypadku większości użytkowników dostawca środowiska uruchomieniowego powinien wystarczyć.
Identyfikator GUID dostawcy uruchamiania CLR to A669021C-C450-4609-A035-5AF59AF4DF18.
Zwykle rejestrowanie ETW jest włączone przed uruchomieniem procesu, a rejestrowanie jest wyłączone po zakończeniu procesu. Jeśli jednak rejestrowanie ETW jest włączone podczas wykonywania procesu, potrzebne są dodatkowe informacje o procesie. Na przykład w przypadku rozpoznawania symboli należy rejestrować zdarzenia metody dla metod, które zostały już załadowane przed włączeniem rejestrowania.
Zdarzenia DCStart
i DCEnd
przechwytują stan procesu, gdy zbieranie danych zostało uruchomione i zatrzymane. (Stan odnosi się do informacji na wysokim poziomie, w tym metod, które były już skompilowane just in time (JIT) i zestawy, które zostały załadowane. Te dwa zdarzenia mogą dostarczyć informacji o tym, co już się stało w procesie; na przykład, które metody zostały skompilowane w trybie JIT itd.
W ramach dostawcy uruchamiania są wywoływane tylko zdarzenia z elementami DC
, DCStart
, DCEnd
lub DCInit
w nazwach. Ponadto te zdarzenia są wywoływane tylko w ramach dostawcy uruchamiania.
Oprócz filtrów słów kluczowych zdarzeń dostawca rundown obsługuje StartRundownKeyword
również słowa kluczowe i EndRundownKeyword
w celu zapewnienia filtrowania docelowego.
Uruchom uruchamianie w znaczników
Uruchamianie uruchamiania jest wyzwalane po włączeniu rejestrowania w ramach dostawcy uruchamiania za pomocą słowa kluczowego StartRundownKeyword
. DCStart
Powoduje to, że zdarzenie jest zgłaszane i przechwytuje stan systemu. Przed rozpoczęciem wyliczenia DCStartInit
jest zgłaszane zdarzenie. Na końcu wyliczenia zdarzenie jest zgłaszane w celu powiadomienia kontrolera, DCStartComplete
że zbieranie danych zostało zakończone normalnie.
Zakończenie uruchamiania
Zakończenie uruchamiania jest wyzwalane, gdy rejestrowanie w ramach dostawcy uruchamiania jest włączone za pomocą słowa kluczowego EndRundownKeyword
. Zakończenie uruchamiania zatrzymuje profilowanie w procesie, który będzie nadal wykonywany. Zdarzenia DCEnd
przechwytują stan systemu podczas zatrzymywania profilowania.
Przed rozpoczęciem wyliczenia DCEndInit
jest zgłaszane zdarzenie. Na końcu wyliczenia zdarzenie jest zgłaszane, aby powiadomić konsumenta, DCEndComplete
że zbieranie danych zakończyło się normalnie. Uruchamianie uruchamiania i uruchamianie końcowe są używane głównie do rozpoznawania symboli zarządzanych. Uruchamianie uruchamiania może podać informacje o zakresie adresów dla metod, które zostały już skompilowane w trybie JIT przed rozpoczęciem sesji profilowania. Zakończenie uruchamiania może dostarczać informacje o zakresie adresów dla wszystkich metod, które zostały skompilowane w trybie JIT, gdy profilowanie ma zostać wyłączone.
Zakończenie uruchamiania nie odbywa się automatycznie po zatrzymaniu sesji profilowania. Zamiast tego narzędzie, które próbuje wykonać rozpoznawanie symboli zarządzanych, musi jawnie wywołać sesję dostawcy rundown CLR z EndRundownKeyword
włączonym słowem kluczowym, tuż przed zatrzymaniem profilowania.
Mimo że uruchamianie uruchamiania lub zakończenie uruchamiania może dostarczyć informacji o zakresie adresów metody do rozpoznawania symboli zarządzanych, zalecamy użycie słowa kluczowego EndRundownKeyword
(które dostarcza DCEnd
zdarzenia) zamiast słowa kluczowego StartRundownKeyword
(które dostarcza DCStart
zdarzenia). Użycie StartRundownKeyword
przyczyn uruchomienia podczas sesji profilowania, co może zakłócić profilowany scenariusz.
Zbieranie danych ETW przy użyciu środowiska uruchomieniowego i dostawców rundown
W poniższym przykładzie pokazano, jak używać dostawcy uruchamiania CLR w sposób umożliwiający rozpoznawanie symboli procesów zarządzanych przy minimalnym wpływie, niezależnie od tego, czy procesy rozpoczynają się, czy kończą się wewnątrz lub poza profilowanym oknem.
Włącz rejestrowanie ETW przy użyciu dostawcy środowiska uruchomieniowego CLR:
xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
Dziennik zostanie zapisany w pliku clr1.etl.
Aby zatrzymać profilowanie podczas wykonywania procesu, uruchom dostawcę rundown, aby przechwycić
DCEnd
zdarzenia:xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
Dzięki temu kolekcja zdarzeń
DCEnd
może rozpocząć sesję uruchamiania. Może być konieczne odczekenie od 30 do 60 sekund na zebranie wszystkich zdarzeń. Dziennik zostanie zapisany w pliku clr1.et2.Wyłącz wszystkie profilowanie ETW:
xperf -stop clrRundown xperf -stop clr
Scal profile, aby utworzyć jeden plik dziennika:
xperf -merge clr1.etl clr2.etl merged.etl
Plik merged.etl będzie zawierać zdarzenia ze środowiska uruchomieniowego i sesji dostawcy uruchamiania.
Narzędzie może wykonywać kroki 2 i 3 (uruchamianie sesji uruchamiania, a następnie kończenie profilowania) zamiast natychmiast wyłączać profilowanie, gdy użytkownik żąda profilowania. Narzędzie może również wykonać krok 4.