DTrace

Начиная с Windows Server 2025, dtrace включается в качестве встроенного средства. DTrace — это программа командной строки, которая позволяет пользователям отслеживать и отлаживать производительность системы в режиме реального времени. С dtraceпомощью пользователей можно динамически инструментировать ядро и код пространства пользователя, не изменяя сам код.

Это мощное средство поддерживает различные методы сбора и анализа данных, включая агрегаты, гистограммы и трассировку событий на уровне пользователя. Пробы можно указать в dtrace сценариях, где скрипт определяет отслеживаемые пробы и действия, которые необходимо предпринять при срабатывании проб. Проба — это определенная точка в коде, где данные можно собирать для выполнения этих действий.

Note

Этот встроенный dtrace порт отличается от установщика MSI DTrace для Windows окружающих параметров и других возможностей. Дополнительные сведения о DTrace для Windows см. в разделе DTrace в Windows.

Полное руководство по использованию DTrace см. в руководстве по динамической трассировке.

Enable DTrace

Прежде чем dtrace его можно будет использовать, сначала его необходимо включить. Чтобы включить dtrace, откройте командную строку с повышенными привилегиями или PowerShell от имени администратора и выполните следующую команду:

bcdedit /set dtrace on

Перезагрузка требуется для того, чтобы это изменение вступило в силу.

Syntax

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

Note

Параметры для dtrace.exe чувствительны к регистру. Не забудьте использовать правильный регистр при указании параметров, чтобы избежать непредвиденного поведения.

Parameter Description
<bufsz> Задает размер буфера, используемого для хранения данных трассировки, где bufsz — требуемый размер буфера в байтах, килобайтах (k), мегабайтах (m) или гигабайтах (g).
<cmd> Выполняет указанную команду и завершает работу после ее завершения, где cmd — это команда, которую необходимо выполнить перед началом трассировки. Если используется более одного экземпляра -c , dtrace завершает работу после завершения выполнения всех команд и сообщает о состоянии выхода для каждого дочернего процесса.
-C Запускает препроцессор ucpp в файлах скриптов перед выполнением трассировки.
<name>=<def> Определяет символ при вызове препроцессора, где name — это имя определяемого символа, а def — необязательное значение, присваиваемое символу.
-e Завершает работу после компиляции запроса, но перед включением проб.
-f Включает или перечисляет пробы, соответствующие указанному имени функции.
-F Объединяет выходные данные трассировки по функции, что упрощает анализ.
-h Создает файл заголовка с определениями статических проб.
<probe-id> Включает или выводит список зондов, которые соответствуют указанному идентификатору пробы, где probe-id — это идентификатор трассируемой пробы.
<path> Добавляет указанный каталог в путь поиска препроцессора, где path — это каталог, который вы хотите добавить, содержащий файлы #include .
-l Выводит список зондов, которые соответствуют заданным критериям на основе параметров -P, -m, -f, -n, -i и -s . Если эти параметры не указаны, перечислены все пробы.
<path> Добавляет указанный каталог в путь поиска библиотеки, где path — это каталог библиотеки, который вы хотите добавить и который содержит общие определения.
-m Включает или выводит список зондов, которые соответствуют указанному имени модуля в аргументе с использованием формата provider:module или module. Если квалификаторы не указаны помимо имени модуля, все пробы с этим именем модуля сопоставляются.
-n Включает или выводит список зондов, которые соответствуют указанному имени зонда в аргументе, используя формат provider:module:function:name, module:function:name, function:name или name. Если квалификаторы не указаны помимо имени пробы, все пробы с этим именем совпадают.
<output> Задает выходной файл для данных трассировки, где выходные данные — это имя файла, который требуется использовать для данных трассировки.
- <pid> Захватывает указанный идентификатор процесса (PID) и кэширует свои таблицы символов, которые можно использовать для анализа поведения программы.
- <provider> Включает или выводит список проб, которые соответствуют указанному имени поставщика, где поставщик — это имя поставщика. Одновременно может использоваться более одного экземпляра параметра -P .
-q Задает тихий режим, который выводит только данные явно трассировки.
<script> Включает или перечисляет зонды в соответствии с указанным сценарием D, где script — это имя сценария, который вы хотите запустить. Если указан параметр -e , то программа компилируется, но сбор данных не выполняется. Если указано -l , то программа компилируется и отображается список совпадающих зондов, но сбор данных не производится. Если -e или -l не указаны, то программа компилируется, сбор данных выполняется в соответствии с указанными зондами и начинается трассировка.
-S Выводит промежуточный код компилятора D-language для отладки в stderr.
<name> Отменяет определение символа при вызове препроцессора, где name — это имя символа, который требуется отменить.
-v Задает подробный режим, который сообщает атрибуты стабильности и аргументы.
-V Отображает версию API dtrace.
-w Разрешает деструктивные действия, если заданы параметры -s, -P, -m, -f, -n или -i . Разрушительные действия могут включать такие действия, как изменение переменных ядра, изменение поведения системных вызовов или сбой системы.
<opt>=<val> Включает или изменяет параметры компилятора и трассировки, где opt — это имя параметра, который требуется включить или изменить, а val — необязательное значение.
<a|c|s|t> Определяет, насколько строгий скомпилированный код C соответствует стандарту ISO C при вызове cpp. Доступные аргументы:
  • -Xa (по умолчанию): предоставляет расширения совместимости ISO C и K&R с семантическими изменениями, требуемыми ISO C. Предопределенный макрос __STDC__ имеет значение 0 при вызове cpp.
  • -Xc (соответствие): обеспечивает строгое соответствие ISO C без расширений совместимости K&R C. Предопределенный макрос __STDC__ имеет значение 1 при вызове cpp.
  • -Xs (K&R C): предоставляет только K&R C, а макрос __STDC__ не определен при вызове cpp.
  • -Xt (переход): Предоставляет расширения совместимости ISO C плюс K&R C без семантических изменений, требуемых ISO C. Предопределенный макрос __STDC__ имеет значение 0 при вызове cpp.
<symbol path> Задает путь поиска символов для разрешения скрипта dtrace, где путь к символам — это путь к общей библиотеке или каталогу, содержащему символы. Для получения дополнительной информации см. раздел Пути символов.
-Y Использует путь поиска символов по умолчанию для скрипта dtrace.
-Z Разрешает описания проб, которые соответствуют нулю проб для отладки.

В следующем списке описаны оставшиеся описания:

  • Предикат: Предикат заключен в косую черту (/ /) и является D-выражением, которое является логическим выражением, которое может ссылаться на переменные, константы и функции. Предикаты можно использовать для фильтрации выходных dtrace данных на основе этих событий. Это выражение вычисляется каждый раз при срабатывании пробы. Если предикат оценивается как true, выполняется связанное действие.

  • Действие: Действие заключено в фигурные скобки ({ }) и представляет собой набор операторов на языке D, которые выполняются при срабатывании зонда и связанном с ним предикате, если таковой имеется, оценивается как true. Действия можно использовать для печати инструкций вывода, записи данных или выполнения других операций, таких как отправка сигнала или изменение переменной.

  • Модуль: компонент поставщика, содержащий набор связанных проб. Модули можно указать в dtrace сценариях, чтобы ограничить область действия скрипта определенным модулем или набором модулей.

  • Func: имя функции, связанной с зондом. Например, проба syscall::NtReadFile связана с функцией read . Функции можно указать в dtrace сценариях, чтобы ограничить область действия скрипта определенной функцией или набором функций.

  • Аргументы: аргументы, которые передаются в выражение действия при срабатывании зонда и связанном с ним предикате, если таковой имеется, оценивается как true. Args можно использовать для сбора данных из контекста пробы, таких как значения аргументов функции или возвращаемых системным вызовом значений. Args также можно использовать для передачи данных между пробами или изменения поведения скрипта.

Examples

Чтобы отследить все системные вызовы, напечатать имя исполняемого файла и имя выполняемого системного вызова выполните следующую команду:

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

Эта команда выполняет трассировку функции "function_name" в процессе с указанным идентификатором ИДЕНТИФИКАТОРа и выводит имя функции, идентификатор идентификатора вызываемого процесса и имя исполняемого файла.

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

Дополнительные примеры использования см. в статье dtrace.

See also