Bagikan melalui


Pemrograman DTrace

DTrace mendukung bahasa pemrograman D. Topik ini menjelaskan cara mulai menulis dan menggunakan skrip DTrace.

Untuk informasi umum tentang DTrace di Windows, lihat DTrace.

Untuk informasi terperinci tentang DTrace, lihat Spesifikasi OpenDTrace versi 1.0 di University Of Cambridge.

Nota

DTrace didukung di build Insider Windows setelah versi 18980 dan Windows Server build 18975.

Sampel skrip tambahan

Skrip D tambahan yang berlaku untuk skenario Windows tersedia di direktori sampel kode sumber DTrace.

https://github.com/microsoft/DTrace-on-Windows/tree/windows/samples/windows

Satu set skrip toolkit opentrace tersedia di https://github.com/opendtrace/toolkit.

Halo Dunia

Skrip DTrace adalah file teks sederhana yang berisi perintah dan elemen skrip pemrograman D.

dtrace:::BEGIN
{
  trace("Hello World from DTrace!");
  exit(0);
}

Simpan file sebagai helloworld.d.

Buka jendela prompt perintah sebagai Administrator dan jalankan skrip menggunakan opsi -s.

dtrace -s helloworld.d
dtrace: script '.\helloworld.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN   Hello World from DTrace!

Waktu pengembalian NtCreateUserProcess

Anda dapat menulis skrip DTrace untuk melacak waktu yang diambil di beberapa fungsi/peristiwa. Di bawah ini adalah contoh sederhana yang melacak fungsi NtCreateUserProcess antara entri/pengembalian untuk proses pembuatan.


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);
}

Simpan file sebagai ntcreatetime.d dan gunakan opsi -s untuk menjalankan skrip pengujian.

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

Pelacak Penghapusan File

Skrip sampel ini menggunakan penyedia syscall untuk menginstrumen NtOpenFile saat masuk dan memeriksa bendera yang diteruskan (argumen #5) untuk melacak penghapusan dalam sistem.

Salin skrip di bawah ini ke filedeletetracker.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);
        }
    }
}

Gunakan opsi -s untuk menjalankan skrip pengujian.

Buat atau temukan file yang ingin Anda hapus. Pindahkan file ke Keranjang Sampah lalu kosongkan Keranjang Sampah. Ketika file dihapus, sebuah peristiwa akan terjadi dan informasi mengenai penghapusan file akan ditampilkan.

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

Program ini dirancang untuk terus memantau penghapusan berkas. Tekan CTRL+C untuk keluar.

Untuk sampel kode tambahan yang lebih besar, lihat topik berikutnya, DTrace Windows Code Samples.

Lihat Juga

DTrace di Windows

DTrace ETW

Sampel Kode Windows DTrace

Dump Langsung DTrace