Aracılığıyla paylaş


DTrace Programlama

DTrace, D programlama dilini destekler. Bu konuda, DTrace betiklerini yazmaya ve kullanmaya nasıl başlandığı açıklanmaktadır.

Windows'da DTrace hakkında genel bilgi için bkz. DTrace.

DTrace hakkında ayrıntılı bilgi için University Of Cambridge'de OpenDTrace Specification sürüm 1.0'a bakın.

Uyarı

DTrace, sürüm 18980 ve Windows Server derlemesi 18975'in ardından Windows'un Insider derlemelerinde desteklenir.

Ek örnek betikler

Windows senaryoları için geçerli olan ek D betikleri DTrace kaynak kodunun samples dizininde bulunur.

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

Bir dizi opentrace betik seti, https://github.com/opendtrace/toolkit adresinde bulunur.

Merhaba Dünya

DTrace betikleri, komutları ve D programlama betiği öğelerini içeren basit metin dosyalarıdır.

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

Dosyayı helloworld.d olarak kaydedin.

Yönetici olarak bir komut istemi penceresi açın ve -s seçeneğini kullanarak betiği çalıştırın.

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

NtCreateUserProcess dönüş süresi

Birden çok işlev/olay arasında geçen süreyi izlemek için DTrace betikleri yazabilirsiniz. Aşağıda, oluşturma işlemi için girdi/dönüş arasındaki NtCreateUserProcess işlevini izleyen basit bir örnek verilmiştir.


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

Dosyayı ntcreatetime.d olarak kaydedin ve test betiğini çalıştırmak için -s seçeneğini kullanın.

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

Dosya Silme İzleyicisi

Bu örnek betik, girdide NtOpenFile'ı araçlandırmak için sistem çağrısı sağlayıcısını kullanır ve sistem genelinde silmeleri izlemek için belirtilen bayrağı (bağımsız değişken #5) denetler.

Aşağıdaki betiği filedeletetracker.d dosyasına kopyalayın.

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

Test betiğini çalıştırmak için -s seçeneğini kullanın.

Silmek istediğiniz dosyayı oluşturun veya bulun. Dosyayı Geri Dönüşüm Kutusu'na taşıyın ve ardından Geri Dönüşüm Kutusu'nu boşaltın. Dosya silindiğinde, bir olay tetiklenir ve dosya silme hakkında bilgiler görüntülenir.

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

Bu program, dosya silmeleri izlemeye devam etmek için tasarlanmıştır. Çıkmak için CTRL+C tuşlarına basın.

Daha büyük kod örnekleri için bir sonraki DTrace Windows Kod Örnekleri konusuna bakın.

Ayrıca Bkz.

Windows'da DTrace

DTrace ETW

DTrace Windows Kod Örnekleri

DTrace Canlı Dökümü