Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
DTrace podporuje programovací jazyk D. Toto téma popisuje, jak začít psát a používat skripty DTrace.
Obecné informace o DTrace ve Windows naleznete v tématu DTrace.
Podrobné informace o DTrace naleznete v OpenDTrace Specification verze 1.0 na University of Cambridge.
Poznámka:
DTrace se podporuje v buildech Insider systému Windows po verzi 18980 a buildu Windows Serveru 18975.
Další ukázkové skripty
Další skripty D použitelné pro scénáře Windows jsou k dispozici v ukázkovém adresáři zdrojového kódu DTrace.
https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows
Sada skriptů opentrace toolkit je k dispozici na adrese https://github.com/opendtrace/toolkit.
Hello World
Skripty DTrace jsou jednoduché textové soubory, které obsahují příkazy a elementy programovacího skriptu D.
dtrace:::BEGIN
{
trace("Hello World from DTrace!");
exit(0);
}
Uložte soubor jako helloworld.d.
Otevřete okno příkazového řádku jako správce a spusťte skript pomocí možnosti -s.
dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN Hello World from DTrace!
Návratová doba funkce NtCreateUserProcess
Můžete vytvářet skripty DTrace, které sledují čas potřebný pro více funkcí nebo událostí. Níže je jednoduchý příklad, který sleduje funkci NtCreateUserProcess mezi vstupem a návratem při vytváření 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);
}
Uložte soubor jako ntcreatetime.d a pomocí možnosti -s spusťte testovací skript.
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
Sledování odstranění souboru
Tento ukázkový skript používá zprostředkovatele syscall k instrumentaci NtOpenFile při vstupu a kontroluje předaný příznak (argument #5) ke sledování odstranění souborů v systému.
Zkopírujte následující skript do souborudeletetracker.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);
}
}
}
Pomocí možnosti -s spusťte testovací skript.
Vytvořte nebo vyhledejte soubor, který chcete odstranit. Přesuňte soubor do koše a vyprázdněte koš. Když se soubor odstraní, spustí se událost a zobrazí se informace o odstranění souboru.
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
Tento program je navržený tak, aby nadále sledoval odstranění souborů. Stisknutím kombinace kláves CTRL+C ukončete.
Další větší ukázky kódu najdete v dalším tématu DTrace Windows Code Samples.