Condividi tramite


DTrace

A partire da Windows Server 2025, dtrace è incluso come strumento integrato. DTrace è un'utilità della riga di comando che consente agli utenti di monitorare le prestazioni del sistema in tempo reale e di eseguirne il debug. Con dtrace, gli utenti possono instrumentare dinamicamente il kernel e il codice dello spazio utente senza modificare il codice stesso.

Questo potente strumento supporta varie tecniche di raccolta e analisi dei dati, tra cui aggregazioni, istogrammi e traccia degli eventi a livello di utente. I probe possono essere specificati negli script di dtrace, laddove lo script definisce i probe da monitorare e le azioni da intraprendere all'attivazione dei probes. Un probe è un punto specifico nel codice in cui è possibile raccogliere i dati per eseguire queste azioni.

Nota

Questa porta integrata di dtrace si differenzia dal programma di installazione MSI di DTrace per parametri circostanti e altre funzionalità di Windows. Per altre informazioni su DTrace per Windows, vedere DTrace in Windows.

Per una guida completa all'uso di DTrace, vedere la Guida alla traccia dinamica.

Abilitare DTrace

Prima di poter usare dtrace, occorre innanzitutto abilitarlo. Per abilitare dtrace, aprire un prompt dei comandi con privilegi elevati o PowerShell come amministratore ed eseguire:

bcdedit /set dtrace on

Per rendere effettiva questa modifica, è necessario un riavvio.

Sintassi

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

Nota

I parametri di dtrace.exe fanno distinzione tra maiuscole e minuscole. Quando si specificano i parametri, assicurarsi di usare la combinazione di maiuscole e minuscole corrette per evitare comportamenti imprevisti.

Parametro Descrizione
-b <bufsz> Imposta le dimensioni del buffer usato per archiviare i dati di traccia, dove bufsz sono le dimensioni desiderate del buffer in byte, kilobyte (k), megabyte (m) o gigabyte (g).
-c <cmd> Esegue il comando specificato e viene chiuso al termine dell'operazione, dove cmd è il comando che si vuole eseguire prima di avviare la traccia. Se viene usata più di un'istanza di -c, dtrace viene chiuso quando tutti i comandi completano l'esecuzione e segnala lo stato di uscita di ogni processo figlio.
C- Esegue il preprocessore ucpp nei file di script prima di eseguire la traccia.
-D <name>=<def> Definisce un simbolo quando si richiama il preprocessore, dove name è il nome del simbolo da definire e def è un valore facoltativo da assegnare al simbolo.
-e Viene chiuso dopo la compilazione di una richiesta, ma prima di abilitare i probe.
-f Abilita o elenca i probe corrispondenti al nome della funzione specificato.
-F Combina l'output di traccia in base alla funzione, semplificandone l'analisi.
-h Genera un file di intestazione con definizioni dei probe statici.
-i <probe-id> Abilita o elenca i probe corrispondenti all'ID probe specificato, dove probe-id è l'identificatore del probe da tracciare.
-I <path> Aggiunge la directory specificata al percorso di ricerca del preprocessore, dove path è la directory che si desidera aggiungere contenente i file #include.
-l Elenca i probe corrispondenti ai criteri specificati in base ai parametri -P, -m, -f, -n, -i e -s. Se questi parametri non vengono specificati, vengono elencati tutti i probe.
-L <path> Aggiunge la directory specificata al percorso di ricerca della libreria, dove path è la directory della libreria da aggiungere contenente definizioni comuni.
-m Abilita o elenca i probe corrispondenti al nome del modulo specificato in un argomento usando il formato provider:module o modulo. Se oltre al nome del modulo non vengono specificati i qualificatori, si troveranno tutti i probe con quel nome del modulo.
-n Abilita o elenca i probe corrispondenti al nome del probe specificato in un argomento usando il formato provider:module:function:name, module:function:name, function:name o name. Se oltre al nome del probe non vengono specificati i qualificatori, si troveranno tutti i probe con quel nome.
-o <output> Imposta il file di output per i dati di traccia, dove output è il nome del file che si desidera usare per i dati di traccia.
-p <pid> Recupera l'ID processo (PID) specificato e memorizza nella cache le relative tabelle di simboli, che possono essere usate per analizzare il comportamento del programma.
-P <provider> Abilita o elenca i probe corrispondenti al nome del provider specificato, dove provider è il nome del provider. È possibile usare più istanze del parametro -P contemporaneamente.
-q Imposta la modalità non interattiva, che restituisce solo dati tracciati in modo esplicito.
-s <script> Abilita o elenca i probe in base allo script D specificato, dove script è il nome dello script che si desidera eseguire. Se si specifica -e, il programma viene compilato ma non viene eseguita alcuna raccolta di dati. Se si specifica -l, il programma viene compilato e viene visualizzato l'elenco dei probe corrispondenti, ma non viene eseguita alcuna raccolta dei dati. Se non si specifica -e o -l, il programma viene compilato, viene eseguita la raccolta dei dati in base ai probe specificati e la traccia viene avviata.
S- Stampa il codice intermedio del compilatore in lingua D per il debug su stderr.
-U <name> Rimuove la definizione di un simbolo quando si richiama il preprocessore, dove name è il nome del simbolo di cui si desidera annullare la definizione.
-v Imposta la modalità dettagliata, che segnala gli attributi e gli argomenti di stabilità.
-v Visualizza la versione dell'API dtrace.
-w Permette azioni distruttive se specificato con i parametri -s, -P, -m, -f, -n o -i. Le azioni distruttive possono includere la modifica delle variabili del kernel, la modifica del comportamento delle chiamate di sistema o l'arresto anomalo del sistema.
-x <opt>=<val> Abilita o modifica le opzioni del compilatore e della traccia, dove opt è il nome dell'opzione che si desidera abilitare o modificare e val è un valore facoltativo.
-X <a|c|s|t> Controlla la rigorosità con cui il codice C che viene compilato rispetta lo standard ISO C quando richiama il file cpp. Gli argomenti disponibili sono:
  • -Xa (predefinito): fornisce ISO C ed estensioni di compatibilità K&R con le modifiche semantiche richieste da ISO C. La macro __STDC__ predefinita ha un valore di 0 quando si richiama il file cpp.
  • -Xc (conformità): fornisce una rigorosa conformità a ISO C senza estensioni di compatibilità K&R e C. La macro __STDC__ predefinita ha un valore di 1 quando viene richiamato il file cpp.
  • -Xs (K&R C): fornisce solo K&R C e la macro __STDC__ non viene definita quando viene richiamato il file cpp.
  • -Xt (transizione): fornisce ISO C ed estensioni di compatibilità K&R e C senza le modifiche semantiche richieste da ISO C. La macro __STDC__ predefinita ha un valore di 0 quando si richiama il file cpp.
-y <symbol path> Imposta il percorso di ricerca dei simboli che lo script di dtrace deve risolvere, dove symbol path è il percorso della libreria o della directory condivisa contenente i simboli. Per altre informazioni, vedere Percorsi dei simboli.
-y Usa il percorso di ricerca dei simboli predefinito per lo script di dtrace.
-Z Consente le descrizioni dei probe corrispondenti a zero probe per il debug.

L'elenco seguente descrive le descrizioni rimanenti:

  • Predicato: il predicato è racchiuso tra barre (/ /) ed è un'espressione D, ossia un'espressione booleana che può riferirsi a variabili, costanti e funzioni. Si possono usare i predicati per filtrare l'output di dtrace in base a questi eventi. Questa espressione viene valutata ogni volta che viene attivato un probe. Se il predicato restituisce true, viene eseguita l'azione associata.

  • Azione: l'azione è racchiusa tra parentesi graffe ({ }) ed è un set di istruzioni in lingua D che vengono eseguite quando si attiva un probe e il predicato ad esso associato, se presente, restituisce true. Le azioni possono essere usate per stampare istruzioni di output, registrare dati o eseguire altre operazioni, come l'invio di un segnale o la modifica di una variabile.

  • Modulo: componente di un provider contenente un set di probe correlati. I moduli possono essere specificati negli script di dtrace per limitare l'ambito dello script a uno specifico modulo o set di moduli.

  • Func: nome di una funzione associata a un probe. Ad esempio, il probe syscall::NtReadFile è associato alla funzione read. Le funzioni possono essere specificate negli script di dtrace per limitare l'ambito dello script a una specifica funzione o a un set di funzioni.

  • Args: gli argomenti passati all'espressione di azione quando si attiva un probe e il predicato ad esso associato, se presente, restituisce true. Gli argomenti possono essere usati per acquisire dati dal contesto del probe, come i valori degli argomenti della funzione o i valori restituiti delle chiamate di sistema. Gli argomenti possono essere usati anche per passare dati tra probe o per modificare il comportamento dello script.

Esempi

Per tracciare tutte le chiamate di sistema, stampare il nome del file eseguibile e il nome della chiamata di sistema in corso, eseguire:

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

Questo comando traccia la funzione "function_name" nel processo con il PID specificato e stampa il nome della funzione, il PID del processo che la chiama e il nome del file eseguibile.

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

Per altri esempi sull'uso di dtrace, vedere Introduzione a DTrace - Comandi su una riga.

Vedi anche