Megosztás a következőn keresztül:


DTrace

A Windows Server 2025-től dtrace kezdődően beépített eszközként is használható. A DTrace egy parancssori segédprogram, amely lehetővé teszi a felhasználók számára a rendszer teljesítményének valós idejű monitorozását és hibakeresését. A dtracefelhasználók dinamikusan rendszerezhetik a kernel- és a felhasználói térkódot anélkül, hogy módosítanák a kódot.

Ez a hatékony eszköz különböző adatgyűjtési és elemzési technikákat támogat, például aggregációkat, hisztogramokat és felhasználói szintű események nyomon követését. A mintavételek olyan szkriptekben adhatók meg, amelyekben dtrace a szkript meghatározza a figyelendő mintavételeket és a mintavételek aktiválásakor végrehajtandó műveleteket. A mintavétel egy adott pont a kódban, ahol adatok gyűjthetők ezen műveletek végrehajtásához.

Megjegyzés:

Ez a beépített port dtrace eltér a Windowshoz készült DTrace MSI-telepítőjétől, amely a paramétereket és egyéb képességeket körülveszi. A Windows DTrace-ről további információt a Windows DTrace-ben talál.

A DTrace használatával kapcsolatos átfogó útmutatót a dinamikus nyomkövetési útmutatóban találja.

A DTrace engedélyezése

A használat előtt dtrace engedélyezni kell. Az engedélyezéshez dtracenyisson meg egy rendszergazdai jogú parancssort vagy PowerShellt, és futtassa a következőt:

bcdedit /set dtrace on

A módosítás érvénybe lépéséhez újraindításra van szükség.

Szemantika

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 ... ]

Megjegyzés:

A dtrace.exe paraméterei megkülönböztetik a kis- és nagybetűket. A váratlan viselkedés elkerülése érdekében ügyeljen arra, hogy a paraméterek megadásakor a megfelelő burkolatot használja.

Paraméter Leírás
-b <bufsz> Beállítja a nyomkövetési adatok tárolásához használt puffer méretét, ahol a bufsz a puffer kívánt mérete bájtban, kilobájtban (k), megabájtban (m) vagy gigabájtban (g).
-c <cmd> Futtatja a megadott parancsot, és a művelet befejeződése után kilép, ahol a parancsmag az a parancs, amelyet a nyomkövetés indítása előtt futtatni szeretne. Ha a -c több példányát használja, a dtrace kilép, amikor az összes parancs fut, és minden gyermekfolyamat kilépési állapotát jelenti.
-C A nyomkövetés futtatása előtt futtatja az ucpp-előfeldolgozót szkriptfájlokon.
-D <name>=<def> Szimbólumot határoz meg az előfeldolgozó meghívásakor, ahol a név a definiálni kívánt szimbólum neve, a def pedig a szimbólumhoz rendelhető opcionális érték.
-e A kérés összeállítása után, de a mintavételek engedélyezése előtt kilép.
-f Engedélyezi vagy listázza a megadott függvénynévnek megfelelő mintavételeket.
-F Kombinálja a nyomkövetési kimenetet függvények szerint, így könnyebben elemezhető.
-h Létrehoz egy fejlécfájlt statikus mintavételek definícióival.
-én <probe-id> Engedélyezi vagy listázza a megadott mintavételi azonosítónak megfelelő mintavételeket, ahol a mintavétel azonosítója a nyomon követhető mintavétel azonosítója.
-Én <path> Hozzáadja a megadott könyvtárat az előfeldolgozó keresési útvonalához, ahol az elérési út az a könyvtár, amelyet hozzá szeretne adni, amely tartalmazza a #include fájlokat.
-l A megadott feltételeknek megfelelő mintavételeket sorolja fel a -P, -m, -f, -n, -i és -s paraméterek alapján. Ha ezek a paraméterek nincsenek megadva, az összes mintavétel megjelenik a listában.
-L <path> Hozzáadja a megadott könyvtárat a tár keresési útvonalához, ahol az elérési út az a könyvtárkönyvtár, amelyet általános definíciókat tartalmazó könyvtárat szeretne hozzáadni.
-m Engedélyezi vagy listázza a megadott modulnévnek megfelelő mintavételeket egy argumentumban a formátumszolgáltató:modul vagy modul használatával. Ha a modulnév mellett nincs megadva minősítő, a modul nevével rendelkező összes mintavétel megfelel.
-n Engedélyezi vagy listázza azokat a mintavételeket, amelyek megfelelnek a megadott mintavételi névnek egy argumentumban a formátumszolgáltató:modul:függvény:név, modul:függvény:név, függvény:név vagy név használatával. Ha a mintavétel neve mellett nincs megadva minősítő, a rendszer az ezzel a névvel rendelkező összes mintavételt egyezteti.
-o <output> Beállítja a nyomkövetési adatok kimeneti fájlját, ahol a kimenet a nyomkövetési adatokhoz használni kívánt fájl neve.
-p <pid> Megragadja a megadott folyamatazonosítót (PID), és gyorsítótárazza a szimbólumtáblákat, amelyek a program viselkedésének elemzésére használhatók.
-P <provider> Engedélyezi vagy listázza a megadott szolgáltatónévnek megfelelő mintavételeket, ahol a szolgáltató a szolgáltató neve. A -P paraméter több példánya is használható egyszerre.
-q Csendes üzemmódot állít be, amely csak explicit módon nyomkövetési adatokat ad ki.
-s <script> Engedélyezi vagy listázza a mintavételeket a megadott D-szkript szerint, ahol a szkript a futtatni kívánt szkript neve. Ha -e van megadva, a program lefordítja a programot, de nem végez adatgyűjtést. Ha -l van megadva, a program lefordítja a programot, és megjelenik az egyeztetett mintavételek listája, de nem végez adatgyűjtést. Ha - e vagy -l nincs megadva, a program lefordítja, az adatgyűjtés a megadott mintavételeknek megfelelően történik, és megkezdődik a nyomkövetés.
-S Kinyomtatja a D-language fordító köztes kódját a stderr hibakereséséhez.
-U <name> Az előfeldolgozó meghívásakor érvénytelenné teszi a szimbólumot, ahol a név annak a szimbólumnak a neve, amelyet meg szeretne tagadni.
-v Részletes módot állít be, amely stabilitási attribútumokat és argumentumokat jelent.
-V Megjeleníti a dtrace API verzióját.
-w A -s, -P, -m, -f, -n vagy -i paraméterekkel megadott romboló műveleteket engedélyezi. A romboló műveletek közé tartozhatnak például a kernelváltozók módosítása, a rendszerhívások viselkedésének módosítása vagy a rendszer összeomlása.
-x <opt>=<val> Engedélyezi vagy módosítja a fordító és a nyomkövetési beállításokat, ahol az opt az engedélyezni vagy módosítani kívánt beállítás neve, az érték pedig opcionális érték.
-X <a|c|s|t> Azt szabályozza, hogy a lefordított C-kód milyen szigorúan felel meg az ISO C szabványnak a cpp meghívásakor. Az elérhető argumentumok a következők:
  • -Xa (alapértelmezett): ISO C és K&R kompatibilitási bővítményeket biztosít az ISO C által megkövetelt szemantikai módosításokkal. Az előre definiált makró __STDC__ a cpp meghívásakor 0 értékű.
  • -Xc (megfelelőség): Szigorúan megfelel az ISO C-nek K&R C kompatibilitási bővítmények nélkül. Az előre definiált makró __STDC__ értéke 1 a cpp meghívásakor.
  • -Xs (K&R C): Csak K&R C-t biztosít, és a __STDC__ makró nincs meghatározva a cpp meghívásakor.
  • -Xt (áttűnés): ISO C és K&R C kompatibilitási bővítményeket biztosít az ISO C által megkövetelt szemantikai módosítások nélkül. Az előre definiált makró __STDC__ a cpp meghívásakor 0 értékű.
-y <symbol path> Beállítja a feloldandó dtrace-szkript szimbólumkeresési elérési útját, ahol a szimbólum elérési útja a szimbólumokat tartalmazó megosztott könyvtár vagy könyvtár elérési útja. További információ: Szimbólumútvonalak.
-Y A dtrace-szkript alapértelmezett szimbólumkeresési elérési útját használja.
-Z Engedélyezi a hibakereséshez a nulla mintavételnek megfelelő mintavételi leírásokat.

A következő lista a többi leírást ismerteti:

  • Predikátum: A predikátum perjelek (/ /) közé tartozik, és egy D-kifejezés, amely egy logikai kifejezés, amely változókra, állandókra és függvényekre hivatkozhat. A predikátumok az események kimenetének szűrésére dtrace használhatók. Ez a kifejezés minden alkalommal kiértékelésre kerül, amikor a mintavétel kigyullad. Ha a predikátum igaz értéket ad, a program végrehajtja a társított műveletet.

  • Művelet: A művelet kapcsos zárójelek ({ }) közé tartozik, és olyan D-nyelvi utasítások halmaza, amelyek akkor lesznek végrehajtva, amikor a mintavétel kigyullad, és a hozzá tartozó predikátum ( ha van ilyen) igaz értéket ad vissza. A műveletek használhatók kimeneti utasítások nyomtatására, adatok rögzítésére vagy egyéb műveletek végrehajtására, például jel küldésére vagy változó módosítására.

  • Modul: Egy szolgáltató összetevője, amely kapcsolódó mintavételeket tartalmaz. A szkriptekben dtrace megadható modulok, amelyek a szkript hatókörét egy adott modulra vagy modulkészletre korlátozzák.

  • Func: A mintavételhez társított függvénynév. A mintavétel például syscall::NtReadFile a read függvényhez van társítva. A szkriptekben dtrace megadható függvények, amelyek a szkript hatókörét egy adott függvényre vagy függvénykészletre korlátozzák.

  • Args: A műveletkifejezésnek átadott argumentumok, amikor egy mintavétel kigyullad, és a hozzá tartozó predikátum ( ha van ilyen) igaz értéket ad vissza. Az Args használatával adatokat rögzíthet a mintavételi környezetből, például a függvényargumentumok értékeit vagy a rendszerhívás visszatérési értékeit. Az Args használatával adatokat továbbíthat a mintavételek között, vagy módosíthatja a szkript viselkedését.

Példák

Az összes rendszerhívás nyomon követéséhez nyomtassa ki a végrehajtható és a rendszerhívás nevét, futtassa a következőt:

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

Ez a parancs a folyamat "function_name" függvényét a megadott PID-vel nyomon követve kinyomtatja a függvény nevét, az azt meghívó folyamat PID-jének nevét és a végrehajtható fájl nevét.

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

További példák a használathoz dtrace: Első lépések a DTrace - Egysoros parancsokkal.

Lásd még