Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja DTrace obsługuje język programowania D. W tym temacie opisano, jak rozpocząć pisanie i używanie skryptów DTrace.
Aby uzyskać ogólne informacje na temat funkcji DTrace w systemie Windows, zobacz DTrace.
Aby uzyskać szczegółowe informacje o DTrace, zobacz Specyfikację OpenDTrace w wersji 1.0 na Uniwersytecie w Cambridge.
Uwaga / Notatka
Narzędzie DTrace jest dostępne w wersjach Insider systemu Windows od wersji 18980 wzwyż oraz w wersjach Windows Server 18975.
Dodatkowe przykładowe skrypty
Dodatkowe skrypty D stosowane w scenariuszach systemu Windows są dostępne w katalogu przykładów kodu źródłowego DTrace.
https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows
Zestaw skryptów zestawu narzędzi opentrace jest dostępny pod adresem https://github.com/opendtrace/toolkit.
Hello world
Skrypty DTrace to proste pliki tekstowe zawierające polecenia i elementy skryptu programowania D.
dtrace:::BEGIN
{
trace("Hello World from DTrace!");
exit(0);
}
Zapisz plik jako helloworld.d.
Otwórz okno wiersza polecenia jako administrator i uruchom skrypt przy użyciu opcji -s.
dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN Hello World from DTrace!
NtCreateUserProcess zwraca czas
Skrypty DTrace można tworzyć w celu śledzenia czasu spędzanego w wielu zdarzeniach/funkcjach. Poniżej znajduje się prosty przykład, który śledzi funkcję NtCreateUserProcess pomiędzy rozpoczęciem a zakończeniem dla tworzenia procesu.
syscall::NtCreateUserProcess:entry
{
self->ts = timestamp;
}
syscall::NtCreateUserProcess:return
{
printf(" [Caller %s]: Time taken to return from create process is %d MicroSecond \n", execname, (timestamp - self->ts)/ 1000);
}
Zapisz plik jako ntcreatetime.d i użyj opcji -s, aby uruchomić skrypt testowy.
C:\Windows\system32>dtrace -s ntcreatetime.d
dtrace: script 'ntcreatetime.d' matched 2 probes
CPU ID FUNCTION:NAME
0 183 NtCreateUserProcess:return [Caller svchost.exe]: Time taken to return from create process is 51191 MicroSecond
0 183 NtCreateUserProcess:return [Caller SearchIndexer.]: Time taken to return from create process is 84418 MicroSecond
0 183 NtCreateUserProcess:return [Caller SearchIndexer.]: Time taken to return from create process is 137961 MicroSecond
Śledzenie usuwania plików
Ten przykładowy skrypt używa dostawcy wywołań systemowych do instrumentowania NtOpenFile przy wejściu i sprawdza, czy przekazana flaga (argument nr 5) jest używana do śledzenia usunięć w systemie.
Skopiuj poniższy skrypt do plikudeletetracker.d.
ERROR{exit(0);}
struct ustr{uint16_t buffer[256];};
syscall::NtOpenFile:entry
{
this->deleted = arg5 & 0x00001000; /* & with FILE_DELETE_ON_CLOSE */
if (this->deleted) {
this->attr = (nt`_OBJECT_ATTRIBUTES*)
copyin(arg2, sizeof(nt`_OBJECT_ATTRIBUTES));
if (this->attr->ObjectName) {
this->objectName = (nt`_UNICODE_STRING*)
copyin((uintptr_t)this->attr->ObjectName,
sizeof(nt`_UNICODE_STRING));
this->fname = (uint16_t*)
copyin((uintptr_t)this->objectName->Buffer,
this->objectName->Length);
printf("Process %s PID %d deleted file %*ws \n", execname,pid,
this->objectName->Length / 2,
((struct ustr*)this->fname)->buffer);
}
}
}
Użyj opcji -s, aby uruchomić skrypt testowy.
Utwórz lub znajdź plik, który chcesz usunąć. Przenieś plik do Kosza, a następnie opróżnij Kosz. Gdy plik zostanie usunięty, wyzwolone zostanie zdarzenie i wyświetlone zostaną informacje o usunięciu pliku.
C:\Windows\system32>dtrace -s filedeletetracker.d
dtrace: script 'filedeletetracker.d' matched 8 probes
CPU ID FUNCTION:NAME
0 512 NtOpenFile:entry Process explorer.exe PID 4684 deleted file \??\C:\$Recycle.Bin\S-1-12-1-3310478672-1302480547-4207937687-2985363607\$ROSR3FA.txt
Ten program jest przeznaczony do dalszego monitorowania usuwania plików. Naciśnij CTRL+C, aby zakończyć.
Więcej większych przykładów kodu można znaleźć w następnym temacie DTrace Windows Code Samples.