Compartir vía


DTrace

A partir de Windows Server 2025, dtrace se incluye como herramienta integrada. DTrace es una utilidad de la línea de comandos que permite a los usuarios supervisar y depurar el rendimiento del sistema en tiempo real. Con dtrace, los usuarios pueden instrumentar dinámicamente el kernel y utilizar código de espacio del usuario sin modificar el propio código.

Esta potente herramienta admite varias técnicas de recopilación y análisis de datos, como agregaciones, histogramas y seguimiento de eventos de nivel de usuario. Los sondeos se pueden especificar en scripts de dtrace en los que el script define los sondeos que se deben supervisar y las acciones que se deben realizar cuando se activan los sondeos. Un sondeo es un punto específico del código donde se pueden recopilar datos para realizar estas acciones.

Nota:

Este puerto integrado de dtrace difiere del instalador MSI de DTrace para parámetros circundantes de Windows y otras funcionalidades. Para obtener más información sobre DTrace para Windows, consulte DTrace en Windows.

Para obtener una guía completa sobre el uso de DTrace, consulte la Guía de seguimiento dinámico.

Habilitación de DTrace

Para poder usar dtrace, primero debe habilitarse. Para habilitar dtrace, abra un símbolo del sistema o PowerShell con privilegios elevados como administrador y ejecute:

bcdedit /set dtrace on

Debe reiniciarse el equipo para que este cambio tenga efecto.

Sintaxis

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:

Los parámetros de dtrace.exe distinguen mayúsculas y minúsculas. Asegúrese de usar correctamente las mayúsculas y minúsculas al especificar parámetros para evitar cualquier comportamiento inesperado.

Parámetro Descripción
-b <bufsz> Establece el tamaño del búfer usado para almacenar datos de seguimiento, donde bufsz es el tamaño deseado del búfer en bytes, kilobytes (k), megabytes (m) o gigabytes (g).
-c <cmd> Ejecuta el comando especificado y sale una vez que se completa, donde cmd es el comando que se desea ejecutar antes de iniciar el seguimiento. Si se usa más de una instancia de -c, dtrace se cierra cuando todos los comandos terminan de ejecutarse e informa del estado de salida de cada proceso secundario.
C- Ejecuta el preprocesador ucpp en los archivos de script antes de ejecutar el seguimiento.
-D <name>=<def> Define un símbolo al invocar el preprocesador, donde name es el nombre del símbolo que se va a definir y def es un valor opcional que se va a asignar al símbolo.
-e Se cierra después de compilar una solicitud, pero antes de habilitar los sondeos.
-f Habilita o enumera sondeos que coinciden con el nombre de función especificado.
F- Combina la salida de seguimiento por función, lo que facilita el análisis.
-h Genera un archivo de encabezado con definiciones para sondeos estáticos.
-i <probe-id> Habilita o enumera los sondeos que coinciden con el identificador de sondeo especificado, donde probe-id es el identificador del sondeo del que se va a realizar el seguimiento.
-I <path> Agrega el directorio especificado a la ruta de acceso de búsqueda del preprocesador, donde path es el directorio que se desea agregar que contiene los archivos #include.
-l Enumera los sondeos que coinciden con los criterios especificados en función de los parámetros -P, -m, -f, -n, -i y -s. Si no se especifican estos parámetros, se enumeran todos los sondeos.
-L <path> Agrega el directorio especificado a la ruta de búsqueda de la biblioteca, donde path es el directorio de biblioteca que se desea agregar y que contiene definiciones comunes.
-m Habilita o enumera sondeos que coinciden con el nombre del módulo especificado en un argumento mediante el formato provider:module o module. Si no se especifican calificadores además del nombre del módulo, todos los sondeos con ese nombre de módulo coinciden.
-n Habilita o enumera sondeos que coinciden con el nombre de sondeo especificado en un argumento mediante el formato provider:module:function:name, module:function:name, function:name o name. Si no se especifican calificadores además del nombre del sondeo, todos los sondeos con ese nombre de sondeo coinciden.
-o <output> Establece el archivo de salida de los datos de seguimiento, donde output es el nombre del archivo que se desea usar para los datos de seguimiento.
-p <pid> Toma el identificador de proceso (PID) especificado y almacena en caché sus tablas de símbolos, que se pueden usar para analizar el comportamiento del programa.
-P <provider> Habilita o enumera sondeos que coinciden con el nombre de proveedor especificado, donde provider es el nombre del proveedor. Se puede usar más de una instancia del parámetro -P a la vez.
-q Establece el modo silencioso, que solo genera datos de seguimiento explícito.
-s <script> Habilita o enumera sondeos según el script D especificado, donde script es el nombre del script que se desea ejecutar. Si se especifica -e, el programa se compila pero no se realiza ninguna recopilación de datos. Si se especifica -l, se compila el programa y se muestra la lista de sondeos coincidentes, pero no se realiza ninguna recopilación de datos. Si no se especifican -e o -l, el programa se compila, la recopilación de datos se realiza según los sondeos especificados y comienza el seguimiento.
-S Imprime el código intermedio del compilador de lenguaje D para la depuración en stderr.
-U <name> Anula la definición de un símbolo al invocar el preprocesador, donde name es el nombre del símbolo cuya definición se desea anular.
-v Establece el modo detallado, que informa de los atributos y argumentos de estabilidad.
-v Muestra la versión de la API dtrace.
-w Permite acciones destructivas cuando se especifica con los parámetros -s, -P, -m, -f, -n o -i. Las acciones destructivas pueden incluir acciones como la modificación de variables de kernel, la modificación del comportamiento de las llamadas al sistema o el bloqueo del sistema.
-x <opt>=<val> Habilita o modifica las opciones del compilador y del seguimiento, donde opt es el nombre de la opción que se desea habilitar o modificar y val es un valor opcional.
-X <a|c|s|t> Controla el nivel de conformidad del código C compilado con el estándar ISO C al invocar el código cpp. Los argumentos disponibles son:
  • -Xa (valor predeterminado): proporciona extensiones de compatibilidad ISO C plus K&R con cambios semánticos requeridos por ISO C. La macro predefinida __STDC__ tiene un valor de 0 cuando se invoca cpp.
  • -Xc (conformidad): proporciona una conformidad estricta de ISO C sin extensiones de compatibilidad K&R C. La macro predefinida __STDC__ tiene un valor de 1 cuando se invoca cpp.
  • -Xs (K&R C): proporciona solo K&R C y la macro __STDC__ no se define cuando se invoca cpp.
  • -Xt (transición): proporciona extensiones de compatibilidad ISO C plus K&R C sin cambios semánticos requeridos por ISO C. La macro predefinida __STDC__ tiene un valor de 0 cuando se invoca cpp.
-y <symbol path> Establece la ruta de acceso de búsqueda de símbolos para el script dtrace que se debe resolver, donde symbol path es la ruta de acceso a la biblioteca o al directorio compartido que contiene los símbolos. Para obtener más información, consulte Rutas de símbolos.
-y Usa la ruta de búsqueda de símbolos default para el script dtrace.
Z- Permite descripciones de sondeo que coincidan con cero sondeos para la depuración.

En la lista siguiente se ofrecen las descripciones restantes:

  • Predicado: el predicado se incluye entre barras diagonales (/ /) y es una expresión D, que es una expresión booleana que puede hacer referencia a variables, constantes y funciones. Los predicados se pueden usar para filtrar la salida de dtrace en función de estos eventos. Esta expresión se evalúa cada vez que se desencadena un sondeo. Si el predicado se evalúa como true, se ejecuta la acción asociada.

  • Acción: la acción se incluye entre llaves ({ }) y es un conjunto de instrucciones de lenguaje D que se ejecutan cuando se activa un sondeo y su predicado asociado, si existe, se evalúa como true. Las acciones se pueden usar para imprimir instrucciones de salida, registrar datos o realizar otras operaciones, como enviar una señal o modificar una variable.

  • Módulo: componente de un proveedor que contiene un conjunto de sondeos relacionados. Los módulos se pueden especificar en scripts dtrace para limitar el ámbito del script a un módulo o a un conjunto específico de módulos.

  • Func: un nombre de función asociado a un sondeo. Por ejemplo, el sondeo syscall::NtReadFile está asociado a la función read. Las funciones se pueden especificar en scripts dtrace para limitar el ámbito del script a una función o a un conjunto específico de funciones.

  • Args: los argumentos que se pasan a la expresión de la acción cuando se desencadena un sondeo y su predicado asociado, si existe, se evalúa como true. Los argumentos se pueden usar para capturar datos del contexto de sondeo, como los valores de los argumentos de función o los valores devueltos de llamadas del sistema. Los argumentos también se pueden usar para pasar datos entre sondeos o para modificar el comportamiento del script.

Ejemplos

Para realizar un seguimiento de todas las llamadas del sistema, imprima el nombre del ejecutable y el nombre de la llamada del sistema que se está realizando y ejecute:

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

Este comando realiza un seguimiento de la función "function_name" en el proceso con el PID especificado e imprime el nombre de la función, el PID del proceso que la llama y el nombre del ejecutable.

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

Para obtener más ejemplos sobre el uso de dtrace, consulte Introducción a DTrace - Comandos de una línea.

Consulte también