Bagikan melalui


DTrace

Dimulai dengan Windows Server 2025, dtrace disertakan sebagai alat bawaan. DTrace adalah utilitas baris perintah yang memungkinkan pengguna untuk memantau dan men-debug performa sistem mereka secara real time. Dengan dtrace, pengguna dapat secara dinamis melengkapi kernel dan kode ruang pengguna tanpa memodifikasi kode itu sendiri.

Alat canggih ini mendukung berbagai teknik pengumpulan dan analisis data, termasuk agregasi, histogram, dan pelacakan peristiwa tingkat pengguna. Pemeriksaan dapat ditentukan dalam skrip di dtrace mana skrip mendefinisikan pemeriksaan yang akan dipantau dan tindakan yang akan diambil ketika pemeriksaan diaktifkan. Pemeriksaan adalah titik tertentu dalam kode tempat data dapat dikumpulkan untuk melakukan tindakan ini.

Catatan

Port bawaan dtrace ini berbeda dari penginstal MSI DTrace untuk Windows di sekitar parameter dan kemampuan lainnya. Untuk mempelajari selengkapnya tentang DTrace untuk Windows, lihat DTrace di Windows.

Untuk panduan komprehensif tentang menggunakan DTrace, lihat Panduan Pelacakan Dinamis.

Mengaktifkan DTrace

Sebelum dtrace dapat digunakan, harus diaktifkan terlebih dahulu. Untuk mengaktifkan dtrace, buka prompt perintah yang ditingkatkan atau PowerShell sebagai admin dan jalankan:

bcdedit /set dtrace on

Reboot diperlukan agar perubahan ini berlaku.

Sintaksis

dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]] [-I path]
[-L path] [-o output] [-p pid] [-s script] [-U name] [-x opt[=val]] [-X a|c|s|t]
[-y symbol path]

[-P provider [[ predicate ] action ]] [-m [ provider: ]
module [[ predicate ] action ]] [-f [[ provider: ] module: ]
func [[ predicate ] action ]] [-n [[[ provider: ] module: ] func: ]
name [[ predicate ] action ]] [-i probe-id [[ predicate ] action ]] [ args ... ]

Catatan

Parameter untuk dtrace.exe peka huruf besar/kecil. Pastikan untuk menggunakan casing yang benar saat menentukan parameter untuk menghindari perilaku yang tidak terduga.

Parameter Deskripsi
-B <bufsz> Mengatur ukuran buffer yang digunakan untuk menyimpan data pelacakan, di mana bufsz adalah ukuran buffer yang diinginkan dalam byte, kilobyte (k), megabyte (m), atau gigabyte (g).
-C <cmd> Menjalankan perintah dan keluar yang ditentukan setelah selesai, di mana cmd adalah perintah yang ingin Anda jalankan sebelum memulai pelacakan. Jika lebih dari satu instans -c digunakan, dtrace keluar ketika semua perintah selesai berjalan dan melaporkan status keluar untuk setiap proses anak.
-C Menjalankan preproscessor ucpp pada file skrip sebelum menjalankan pelacakan.
-D <name>=<def> Mendefinisikan simbol saat memanggil preprocessor, di mana nama adalah nama simbol yang akan ditentukan, dan def adalah nilai opsional untuk ditetapkan ke simbol.
-E Keluar setelah mengkompilasi permintaan tetapi sebelum mengaktifkan pemeriksaan.
-F Mengaktifkan atau mencantumkan pemeriksaan yang cocok dengan nama fungsi yang ditentukan.
-F Menggabungkan output jejak berdasarkan fungsi, sehingga lebih mudah dianalisis.
-h Menghasilkan file header dengan definisi untuk pemeriksaan statis.
-I <probe-id> Mengaktifkan atau mencantumkan pemeriksaan yang cocok dengan ID pemeriksaan yang ditentukan, di mana probe-id adalah pengidentifikasi untuk pemeriksaan yang akan dilacak.
-I <path> Menambahkan direktori yang ditentukan ke jalur pencarian praprosesor, di mana jalur adalah direktori yang ingin Anda tambahkan yang berisi file #include .
-L Mencantumkan pemeriksaan yang cocok dengan kriteria yang ditentukan berdasarkan parameter -P, -m, -f, -n, -i, dan -s . Jika parameter ini tidak ditentukan, semua pemeriksaan akan dicantumkan.
-L <path> Menambahkan direktori yang ditentukan ke jalur pencarian pustaka, di mana jalur adalah direktori pustaka yang ingin Anda tambahkan yang berisi definisi umum.
-m Mengaktifkan atau mencantumkan pemeriksaan yang cocok dengan nama modul yang ditentukan dalam argumen menggunakan penyedia format :modul ataumodul. Jika kualifikasi tidak ditentukan selain nama modul, semua probe dengan nama modul tersebut cocok.
-n Mengaktifkan atau mencantumkan pemeriksaan yang cocok dengan nama pemeriksaan yang ditentukan dalam argumen menggunakan format provider:module:function:name, module:function:name, function:name, atau name. Jika kualifikasi tidak ditentukan selain nama pemeriksaan, semua probe dengan nama tersebut cocok.
-O <output> Mengatur file output untuk data pelacakan, di mana output adalah nama file yang ingin Anda gunakan untuk data pelacakan.
-P <pid> Mengambil ID proses (PID) yang ditentukan dan menyimpan tabel simbolnya, yang dapat digunakan untuk menganalisis perilaku program.
-P <provider> Mengaktifkan atau mencantumkan pemeriksaan yang cocok dengan nama penyedia yang ditentukan, di mana penyedia adalah nama penyedia. Lebih dari satu instans parameter -P dapat digunakan secara bersamaan.
-q Mengatur mode diam, yang hanya menghasilkan data yang ditelusuri secara eksplisit.
-s <script> Mengaktifkan atau mencantumkan pemeriksaan sesuai dengan skrip D yang ditentukan, di mana skrip adalah nama skrip yang ingin Anda jalankan. Jika -e ditentukan, program dikompilasi tetapi tidak ada pengumpulan data yang dilakukan. Jika -l ditentukan, program dikompilasi dan daftar pemeriksaan yang cocok ditampilkan, tetapi tidak ada pengumpulan data yang dilakukan. Jika -e atau -l tidak ditentukan, program dikompilasi, pengumpulan data dilakukan sesuai dengan pemeriksaan yang ditentukan dan pelacakan dimulai.
-S Mencetak kode perantara pengkompilasi bahasa D untuk penelusuran kesalahan ke stderr.
-U <name> Membatalkan pendefinisian simbol saat memanggil praprosesor, di mana nama adalah nama simbol yang ingin Anda batalkan definisinya.
-v Mengatur mode verbose, yang melaporkan atribut dan argumen stabilitas.
-V Menampilkan versi API dtrace.
w- Mengizinkan tindakan destruktif ketika ditentukan dengan parameter -s, -P, -m, -f, -n, atau -i . Tindakan destruktif dapat mencakup tindakan seperti memodifikasi variabel kernel, mengubah perilaku panggilan sistem, atau menabrak sistem.
-X <opt>=<val> Mengaktifkan atau memodifikasi opsi kompilator dan pelacakan, di mana memilih adalah nama opsi yang ingin Anda aktifkan atau ubah, dan val adalah nilai opsional.
-X <a|c|s|t> Mengontrol seberapa ketat kode C yang dikompilasi mematuhi standar ISO C saat memanggil cpp. Argumen yang tersedia adalah:
  • -Xa (default): menyediakan ekstensi kompatibilitas ISO C plus K&R dengan perubahan semantik yang diperlukan oleh ISO C. Makro yang telah ditentukan sebelumnya __STDC__ memiliki nilai 0 saat cpp dipanggil.
  • -Xc (kesesuaian): Menyediakan kesesuaian yang ketat dari ISO C tanpa ekstensi kompatibilitas K&R C. Makro yang telah ditentukan sebelumnya __STDC__ memiliki nilai 1 saat cpp dipanggil.
  • -Xs (K&R C): Menyediakan K&R C saja, dan makro __STDC__ tidak ditentukan saat cpp dipanggil.
  • -Xt (transisi): Menyediakan ekstensi kompatibilitas ISO C plus K&R C tanpa perubahan semantik yang diperlukan oleh ISO C. Makro yang telah ditentukan sebelumnya __STDC__ memiliki nilai 0 saat cpp dipanggil.
-Y <symbol path> Mengatur jalur pencarian simbol untuk skrip dtrace untuk diselesaikan, di mana jalur simbol adalah jalur ke pustaka atau direktori bersama yang berisi simbol. Untuk mempelajari selengkapnya, lihat Jalur Simbol.
-Y Menggunakan jalur pencarian simbol default untuk skrip dtrace.
Z- Mengizinkan deskripsi pemeriksaan yang cocok dengan nol pemeriksaan untuk penelusuran kesalahan.

Daftar berikut ini menjelaskan deskripsi yang tersisa:

  • Predikat: Predikat diapit dalam garis miring ke depan (/ /) dan merupakan ekspresi D, yang merupakan ekspresi boolean yang dapat mereferensikan variabel, konstanta, dan fungsi. Predikat dapat digunakan untuk memfilter output dtrace berdasarkan peristiwa ini. Ekspresi ini dievaluasi setiap kali pemeriksaan diaktifkan. Jika predikat dievaluasi ke true, tindakan terkait dijalankan.

  • Tindakan: Tindakan diapit kurung kurawal ({ }) dan merupakan sekumpulan pernyataan bahasa D yang dijalankan ketika pemeriksaan diaktifkan dan predikat terkaitnya, jika ada, mengevaluasi ke true. Tindakan dapat digunakan untuk mencetak pernyataan output, merekam data, atau melakukan operasi lain, seperti mengirim sinyal atau memodifikasi variabel.

  • Modul: Komponen penyedia yang berisi serangkaian pemeriksaan terkait. Modul dapat ditentukan dalam dtrace skrip untuk membatasi cakupan skrip ke modul atau set modul tertentu.

  • Func: Nama fungsi yang terkait dengan pemeriksaan. Misalnya, pemeriksaan dikaitkan syscall::NtReadFile dengan read fungsi . Fungsi dapat ditentukan dalam dtrace skrip untuk membatasi cakupan skrip ke fungsi atau sekumpulan fungsi tertentu.

  • Args: Argumen yang diteruskan ke ekspresi tindakan saat pemeriksaan diaktifkan dan predikat terkait, jika ada, mengevaluasi ke true. Arg dapat digunakan untuk mengambil data dari konteks pemeriksaan, seperti nilai argumen fungsi atau nilai pengembalian panggilan sistem. Args juga dapat digunakan untuk meneruskan data antara pemeriksaan atau untuk memodifikasi perilaku skrip.

Contoh

Untuk melacak semua panggilan sistem, cetak nama yang dapat dieksekusi dan nama panggilan sistem yang sedang dilakukan, jalankan:

dtrace -n 'syscall:::entry { printf("%s called syscall %s", execname, probefunc); }'

Perintah ini melacak fungsi "function_name" dalam proses dengan PID yang ditentukan dan mencetak nama fungsi, PID proses yang memanggilnya, dan nama yang dapat dieksekusi.

dtrace -n 'pid$target::function_name:entry { printf("Function %s called by process %d (%s)", probefunc, pid, execname); }' -p <PID>

Untuk contoh lebih lanjut tentang menggunakan dtrace, lihat Mulai menggunakan DTrace - Satu perintah baris.

Lihat juga