Создание пользовательских инструментов

Вы узнали, что Инструменты имеют встроенные инструменты, предоставляющие большую информацию о внутренних работах Вашего приложения. Иногда, тем не менее, можно хотеть адаптировать информацию, собранную более близко к собственному коду. Например, вместо того, чтобы собрать данные каждый раз, когда функция вызвана, Вы могли бы хотеть установить условия на том, когда собраны данные. Также Вы могли бы хотеть вырыть глубже в Ваш собственный код, чем встроенные инструменты позволяют. Для этих ситуаций Инструменты позволяют Вам создать пользовательские инструменты. Каждый раз, когда возможно, рекомендуется использовать существующий инструмент вместо того, чтобы создать новый инструмент. Создание пользовательских инструментов является расширенной функцией.

Следующие разделы показывают Вам, как создать пользовательский инструмент и как использовать тот инструмент и с Инструментальным приложением и с dtrace инструмент командной строки.

О пользовательских инструментах

Пользовательские инструменты используют DTrace для своей реализации. DTrace является динамическим средством трассировки, первоначально создаваемым Sun и портированным к OS X. Поскольку DTrace наслаждается ядро операционной системы, у Вас есть доступ к низкоуровневой информации о самом ядре и пользовательских процессах, работающих на Вашем компьютере. Многие встроенные инструменты уже на основе DTrace. И даже при том, что DTrace является самостоятельно очень мощным и сложным инструментом, Инструменты обеспечивает простой интерфейс, предоставляющий Вам доступ к питанию DTrace без сложности.

DTrace не был портирован к iOS, таким образом, не возможно создать пользовательские инструменты для устройств рабочий iOS.

Пользовательские инструменты создаются с помощью зондов DTrace. Зонд походит на датчик, который Вы помещаете в свой код. Это соответствует расположению или событию, такому как функциональная точка входа, с которой DTrace может связать. Когда функция выполняется, или событие сгенерировано, связанные тестовые огни и DTrace работает, любые действия связаны с зондом. Большинство действий DTrace просто собирает данные об операционной системе и поведении пользовательского приложения в тот момент. Возможно, однако, выполнить пользовательские сценарии как часть действия. Сценарии позволяют Вам использовать функции DTrace для точной настройки данных, которые Вы собираете.

Зонды стреляют каждый раз, когда с ними встречаются, но действие, связанное с тестовой потребностью не быть выполненными каждый раз тестовые огни. Предикат является условным оператором, позволяющим Вам ограничивать, когда выполняется действие зонда. Например, можно ограничить зонд определенным процессом или пользователем, или можно выполнить действие, когда особое условие в инструменте является истиной. По умолчанию зонды не имеют никаких предикатов, означая, что связанное действие выполняет каждый раз тестовые огни. Можно добавить любое число предикатов к зонду, однако, и соединить их вместе использование AND и OR операторы для создания сложных деревьев решений.

Пользовательский инструмент состоит из следующих блоков:

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

Зонды не требуются, чтобы иметь глобальный DATA или сценарии END и BEGIN. Когда Вы хотите совместно использовать данные среди зондов или обеспечить своего рода начальную конфигурацию для Вашего инструмента, те элементы используются в усовершенствованном инструментальном проекте. Создание DATA, BEGIN и блоков END описано в Подсказках для Записи Пользовательских Сценариев.

Создание пользовательского инструмента

Для создания пользовательского инструмента DTrace выберите Instrument> Build New Instrument. Эта команда выводит на экран инструментальный лист конфигурации, показанный на рисунке 12-1. Вы используете этот лист для указания информации об инструменте, включая любые зонды и пользовательские сценарии.

Рисунок 12-1  инструментальный лист конфигурации
The instrument configuration sheet

Как минимум необходимо предоставить следующую информацию для каждого инструмента, который Вы создаете:

Инструмент должен содержать по крайней мере один зонд и может содержать больше чем один. Тестовое определение состоит из информации о провайдере, информации о предикате и действия. Все зонды должны указать информацию о провайдере как минимум, и почти все зонды определяют своего рода действие. Часть предиката тестового определения является дополнительной, но может быть очень полезным инструментом для фокусировки Вашего инструмента на корректных данных.

Добавление и удаление зондов

Каждый новый инструмент идет с одним зондом, который можно сконфигурировать. Для добавления большего количества зондов нажмите кнопку Add (+) у основания инструментального диалогового окна конфигурации.

Для удаления зонда из инструмента щелкните по зонду, чтобы выбрать его и нажать кнопку Remove (-) у основания инструментального диалогового окна конфигурации.

../Art/instruments_custom_instrument_pane_add_remove_probes_2x.png

При добавлении зондов это - хорошая идея обеспечить описательное имя для зонда. По умолчанию, Инструменты перечисляет зонды с именами как Зонд 1 и Зонд 2.

Указание тестового провайдера

Для указания точки расположения или события, инициировавшего зонд необходимо связать надлежащего провайдера с зондом. Провайдеры являются модулями ядра, действующими как агенты для DTrace, обеспечивая инструментарий, необходимый для создания зондов. Вы не должны знать, как провайдеры работают для создания инструмента, но действительно необходимо знать основные возможности каждого провайдера. Таблица 12-1 перечисляет провайдеров, поддерживающихся Инструментальным приложением и доступных для использования в Ваших пользовательских инструментах. Списки столбцов Провайдера имя, выведенное на экран в инструментальном листе конфигурации и списках столбцов провайдера DTrace подлинное имя провайдера, используются в соответствующем сценарии DTrace.

Таблица 12-1  провайдеры DTrace

Провайдер

Провайдер DTrace

Описание

Пользовательский процесс

pid

Зонд стреляет в запись (или возврат) указанной функции в Вашем коде. Необходимо обеспечить имя функции и имя библиотеки, содержащей его.

Objective C

objc

Зонд стреляет в запись (или возврат) указанного метода Objective C. Необходимо обеспечить имя метода и класс, которому оно принадлежит.

Системный вызов

syscall

Зонд стреляет в запись (или возврат) указанной функции системной библиотеки.

DTrace

DTrace

Когда сам DTrace вводит BEGIN, END или блок ERROR, зонд стреляет.

Границы функции ядра

fbt

Зонд стреляет в запись (или возврат) указанной функции ядра в Вашем коде. Необходимо обеспечить имя функции ядра и имя библиотеки, содержащей его.

Мах

mach_trap

Зонд стреляет в запись (или возврат) указанной библиотечной функции Маха.

Профиль

profile

Зонд регулярно стреляет в интервал требуемого времени на каждом ядре машины. Зонды профиля могут стрелять с гранулярностью, колеблющейся от микросекунд до дней.

Галочка

tick

Зонд стреляет в периодические интервалы на одном ядре машины. Зонды галочки могут стрелять с гранулярностью, колеблющейся от микросекунд до дней. Вы могли бы использовать этого провайдера для выполнения периодических задач, не требующихся, чтобы быть на определенном ядре.

ВВОД-ВЫВОД

io

Зонд стреляет в начале указанной подпрограммы ядра. Для списка функций, контролируемых этим зондом, используйте dtrace -l команда от Терминала для получения списка тестовых точек. Можно тогда искать этот список зонды, контролируемые io модуль.

Процесс ядра

proc

Зонд стреляет в инициирование одной из нескольких подпрограмм уровня ядра. Для списка функций, контролируемых этим зондом, используйте dtrace -l команда от Терминала для получения списка тестовых точек. Можно тогда искать этот список функции, контролируемые proc модуль.

Синхронизация пользовательского уровня

plockstat

Зонд стреляет в одну из нескольких точек синхронизации. Можно использовать этого провайдера для контроля взаимного исключения и событий блокировки чтения-записи.

Планирование CPU

sched

Когда события планирования CPU имеют место, зонд стреляет.

Базовые данные

CoreData

Зонд стреляет в одно из нескольких Базовых Специфичных для данных событий. Для списка методов, контролируемых этим зондом, используйте dtrace -l команда от Терминала для получения списка тестовых точек. Можно тогда искать этот список методы, контролируемые CoreData модуль.

После выбора провайдера для Вашего зонда необходимо указать информацию, необходимую зонду. Например, для некоторых зондов функционального уровня, провайдерам, возможно, понадобятся имена функций или имена методов, вместе с Вашим модулем кода или иначе классом, содержащим Ваш модуль. Другим провайдерам, возможно, только понадобитесь Вы для выбора надлежащих событий из всплывающего меню.

После конфигурирования зонда можно продолжить для добавления дополнительных предикатов к нему (для определения, когда он должен стрелять), или можно идти вперед и определить действие для того зонда.

Добавление предикатов к зонду

Когда действие зонда выполняется Инструментами, предикаты дают Вам контроль. Можно использовать предикаты, чтобы препятствовать тому, чтобы Инструменты собрали данные, когда Вы не хотите их или думаете, что данные могли бы быть ошибочными. Например, если Ваш код показывает необычное поведение только, когда штабель достигает определенной глубины, можно использовать предикат для указания минимальной целевой глубины штабеля. Каждый раз, когда зонд стреляет, Инструменты оценивает связанные предикаты. Только если они оценивают к истине, делает DTrace, выполняют связанные действия.

bullet
Добавить предикат к зонду
  1. Нажмите кнопку Add (+) в тестовых условиях.

  2. Выберите тип предиката.

  3. Определите значения предиката.

Рисунок 12-2  , Конфигурирующий зонд
Adding a predicate

Можно добавить последующие предикаты с помощью кнопок Add (+) или зонда или предиката. Для удаления предиката нажмите кнопку Remove (-) рядом с предикатом.

Инструменты оценивают предикаты сверху донизу в порядке, в котором они появляются. Для реконструкции предикатов щелкните по строке предиката и перетащите ее к новому расположению в таблице. Можно соединить использование предикатов AND и OR операторы, но Вы не можете сгруппировать их для создания вложенных блоков условия. Вместо этого упорядочьте свои предикаты тщательно, чтобы гарантировать, что проверяются все надлежащие условия.

Используйте первое всплывающее меню в строке предиката для выбора данных для проверки как часть условия. Таблица 12-2 перечисляет стандартные переменные, определенные DTrace, который можно использовать в предикатах или коде сценария. Переменный столбец перечисляет имя, как это появляется в инструментальной панели конфигурации и “списках столбцов” переменной DTrace подлинное имя переменной, используемой в соответствующих сценариях DTrace. В дополнение к тестированию стандартных переменных можно протестировать против пользовательских переменных и констант от кода сценария путем указания Пользовательского типа переменной в поле предиката.

Таблица 12-2  переменные DTrace

Переменная

Переменная DTrace

Описание

Вызывающая сторона

caller

Значение счетчика команд текущего потока прежде, чем ввести зонд. Эта переменная содержит целочисленное значение.

Микросхема

chip

Идентификатор для физической микросхемы, выполняющей зонд. Это - 0 чисел с основанием, указывающих индекс текущего ядра. Например, машина с четырьмя ядрами имеет ядра 0 до 3.

ЦП

cpu

Идентификатор для CPU, выполняющего зонд. Это - 0 чисел с основанием, указывающих индекс текущего ядра. Например, машина с четырьмя ядрами имеет ядра 0 до 3.

Текущий рабочий каталог

cwd

Текущий рабочий каталог текущего процесса. Эта переменная содержит строковое значение.

Последняя ошибка #

errno

Ошибочное значение, возвращенное последним системным вызовом, сделано на текущем потоке. Эта переменная содержит целочисленное значение.

Исполнимая программа

execname

Имя, переданное exec выполнить текущий процесс. Эта переменная содержит строковое значение.

Идентификатор пользователя

uid

Реальный пользователь ID текущего процесса. Эта переменная содержит целочисленное значение.

Группа ID

gid

Реальная группа ID текущего процесса. Эта переменная содержит целочисленное значение.

Процесс ID

pid

Процесс ID текущего процесса. Эта переменная содержит целочисленное значение.

Родительский ID

ppid

Процесс ID родительского процесса. Эта переменная содержит целочисленное значение.

Поток ID

tid

Поток ID текущего потока. Это - то же значение, возвращенное pthread_self функция.

Уровень приоритета прерываний

ipl

Уровень приоритета прерываний на текущем CPU в это время зонд стрелял. Эта переменная содержит значение целого без знака.

Функция

probefunc

Часть имени функции описания зонда. Эта переменная содержит строковое значение.

Модуль

probemod

Часть имени модуля описания зонда. Эта переменная содержит строковое значение.

Имя

probename

Часть имени описания зонда. Эта переменная содержит строковое значение.

Провайдер

probeprov

Заглавная роль провайдера описания зонда. Эта переменная содержит строковое значение.

Корневой каталог

root

Корневой каталог процесса. Эта переменная содержит строковое значение.

Глубина штабеля

stackdepth

Глубина стекового фрейма текущего потока в это время поток стреляла. Эта переменная содержит значение целого без знака.

Относительная метка времени

timestamp

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

Виртуальная метка времени

vtimestamp

Количество времени текущий поток работало в наносекундах. Это значение не включает время, проведенное в предикаты DTrace и действия. Эта переменная содержит 64-разрядное целочисленное значение без знака.

Метка времени

walltimestamp/1000

Текущее число наносекунд, протекших с тех пор 00:00 Universal, скоординировало Время 1 января 1970. Эта переменная содержит 64-разрядное целочисленное значение без знака.

arg0 через arg9

arg0 через arg9

Первые 10 параметров зонду, представленному как необработанные 64-разрядные целые числа. Если меньше чем десять параметров были переданы зонду, остающиеся переменные содержат значение 0.

Пользовательский

Имя Вашей переменной

Используйте эту опцию указать переменное или постоянное из одного из Ваших сценариев.

В дополнение к указанию условной переменной необходимо указать оператор сравнения и целевое значение.

Добавление действий к зонду

Когда тестовая точка, определенная Вашим инструментом, поражена, и условия предиката зонда оценивают к истине, DTrace выполняет действия, связанные с зондом. Вы используете действия своего зонда, чтобы собрать данные или выполнить некоторую дополнительную обработку. Например, если Ваш зонд контролирует определенную функцию или метод, у Вас мог бы быть он, возвращают вызывающую сторону той функции и любой информации трассировки стека к Инструментам. Если бы Вы хотели немного более усовершенствованное действие, то Вы могли бы использовать переменную сценария для отслеживания числа раз, функция была вызвана, и сообщите ту информацию также. И если бы Вы хотели еще более усовершенствованное действие, то Вы могли бы записать сценарий, использующий уровень ядра функции DTrace для определения состояния блокировки, используемой функцией. В этом последнем случае Ваш код сценария мог бы также возвратить текущего владельца блокировки (если существует один) помочь Вам определить взаимодействия среди различных потоков своего кода.

Рисунок 12-3 показывает часть инструментального листа конфигурации, где Вы указываете действия своего зонда. Часть сценария просто содержит текстовое поле для Вас для ввода в коде сценария. (Инструменты не проверяют Ваш код прежде, чем передать его DTrace, так проверьте свой код тщательно.) Нижний раздел содержит средства управления для указания данных, которые Вы хотите, чтобы DTrace возвратил Инструментам. Можно использовать всплывающие меню для конфигурирования встроенных переменных DTrace, которые Вы хотите возвратить. Можно также выбрать Custom из этого всплывающего меню и возвратить одну из переменных сценария.

Рисунок 12-3  , Конфигурирующий действие зонда
Configuring a probe’s action

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

  • Переменная сценария, содержащая данные

  • Имя для применения к переменной в инструментальном интерфейсе

  • Тип переменной

Любые данные, которые Ваш зонд возвратил Инструментам, собраны и выведены на экран в подробной области Вашего инструмента. Подробная область выводит на экран все переменные данных независимо от типа. Если информация трассировки стека доступна для определенного зонда, Инструменты выводит на экран ту информацию в Расширенном Подробном инспекторе Вашего инструмента. Кроме того, Инструменты автоматически ищет целочисленные типы данных, возвращенные Вашим инструментом, и добавляет те типы к списку статистики, которую Ваш инструмент может вывести на экран в области дорожки.

Поскольку сценарии DTrace работают в пространстве ядра и Инструментальном выполнении приложения в пространстве пользователя, если Вы хотите возвратить значение основанной на пользовательском указателе переменной сценария к Инструментам, необходимо создать буфер для содержания данных переменной. Самый простой способ создать буфер состоит в том, чтобы использовать copyin или copyinstr подпрограммы найдены в DTrace. copyinstr подпрограмма берет указатель на струну до и возвращает содержание строки в форме, которую можно возвратить Инструментам. Точно так же copyin подпрограмма берет указатель и значение размера и возвращает буфер данным, которые можно позже отформатировать в строку с помощью stringof ключевое слово. Обе из этих подпрограмм являются частью среды DTrace и могут использоваться от любой части определения действия Вашего зонда. Например, для возврата строки из указателя строки C-стиля Вы просто обертываете имя переменной с copyinstr подпрограмма, как показано на рисунке 12-4.

Рисунок 12-4  Возвращая указатель строки
Returning a string pointer

Для списка встроенных переменных, поддерживаемых Инструментами, посмотрите Таблицу 12-2. Для получения дополнительной информации о сценариях и переменных сценария, посмотрите Подсказки для Записи Пользовательских Сценариев. Для получения дополнительной информации о подпрограммах DTrace, включая copyin и copyinstr подпрограммы, см. Солярис Динамическое Руководство по Трассировке, доступное от Технологической Сети Oracle.

Подсказки для записи пользовательских сценариев

Вы пишете сценарии DTrace с помощью языка сценариев D, синтаксис которого получен из большого подмножества языка программирования C. Язык D комбинирует конструкции программирования языка C со специальным набором функций и переменных для помощи Вам трассировочная информация в Вашем приложении.

Следующие разделы описывают некоторые распространенные способы использовать сценарии в Ваших пользовательских инструментах. Эти разделы не обеспечивают всесторонний обзор языка D или процесса для записи сценариев DTrace. Для получения информации о сценариях и языке D, см. Солярис Динамическое Руководство по Трассировке, доступное от Технологической Сети Oracle.

Запись BEGIN и сценариев END

Если Вы хотите сделать больше, чем возврат информация во встроенных переменных DTRACE к Инструментам каждый раз, когда Ваше действие стреляет, необходимо записать пользовательские сценарии. Сценарии взаимодействуют непосредственно с DTrace на уровне ядра, обеспечивая доступ к низкоуровневой информации о ядре и активном процессе. Большинство инструментов использует сценарии для сбора информации, не легко доступной от DTrace. Можно также использовать сценарии для управления необработанными данными прежде, чем возвратить его Инструментам. Например, если Вы хотите упростить сравнивать то значение графически с другими значениями в области дорожки Вашего инструмента, можно использовать сценарий для нормализации значения данных к определенному диапазону.

В Инструментах пользовательский инструментальный лист конфигурации обеспечивает несколько областей, где можно записать сценарии DTrace:

  • Раздел DATA содержит определения любых глобальных переменных, которые Вы хотите использовать в Вашем инструменте.

  • Раздел BEGIN содержит любой код инициализации для Вашего инструмента.

  • Каждый зонд содержит код сценария как часть его действия.

  • Раздел END содержит, любой очищает код для Вашего инструмента.

Все разделы сценария являются дополнительными. Вы не обязаны иметь сценарии инициализации или сценарии очистки, если Вашему инструменту не нужны они. Если Ваш инструмент определяет глобальные переменные в своем разделе DATA, однако, рекомендуется также обеспечить сценарий инициализации для установки тех переменных в известное значение. Язык D не позволяет Вам присваивать значения, встроенные с Вашими объявлениями глобальной переменной, таким образом, необходимо поместить те присвоения в раздел BEGIN. Например, простой раздел DATA мог бы состоять из единственного объявления переменной, такого как следующее:

int myVariable;

Соответствующий раздел BEGIN тогда содержал бы следующий код для инициализации той переменной:

myVariable = 0;

Если Ваши соответствующие тестовые действия изменяют значение myVariable, Вы могли бы использовать раздел END своего зонда, чтобы отформатировать и распечатать окончательное значение переменной.

Большая часть Вашего кода сценария, вероятно, будет связана с отдельными зондами. Каждому зонду можно было связать сценарий с его действием. Когда это прибывает время для выполнения действия зонда, DTrace выполняет код сценария сначала и затем возвращает любые запрошенные данные назад Инструментам. Поскольку пасование назад данных к Инструментам включает копирование данных от пространства ядра назад к Инструментальному пространству приложения, необходимо всегда пасовать назад данные к Инструментам путем конфигурирования надлежащих записей в “Записи следующие данные “: раздел инструментального листа конфигурации. Переменные, возвращенные вручную из Вашего кода сценария, не могут быть возвращены правильно к Инструментам.

Доступ к данным ядра из пользовательских сценариев

Поскольку сценарии DTrace выполняются в системном ядре, у них есть доступ к символам ядра. Если Вы хотите смотреть на глобальные переменные ядра и структуры данных от Ваших пользовательских инструментов, можно сделать так в сценариях DTrace. Для доступа к переменной ядра предшествуйте имени переменной с символом одинарной левой кавычки (`). Символ одинарной левой кавычки говорит DTrace искать указанную переменную за пределами текущего сценария.

Перечисление 12-1 показывает демонстрационный сценарий действия, получающий текущую информацию о загрузке от avenrun переменная ядра и использование, что переменная для вычисления одноминутной средней загрузки системы. Если необходимо было создать зонд с помощью провайдера Профиля, у Вас мог бы быть этот сценарий, собирают данные загрузки периодически и затем график та информация в Инструментах.

Перечисление 12-1  , Получающее доступ к переменным ядра из сценария DTrace

this->load1a = `avenrun[0]/1000;
this->load1b = ((`avenrun[0] % 1000) * 100) / 1000;
this->load1 = (100 * this->load1a) + this->load1b;

Определение объема переменных соответственно

Сценарии DTrace имеют чрезвычайно плоскую структуру вследствие отсутствия операторов управления потоком и желания свести тестовое время выполнения к минимуму. Однако можно определить объем переменных в сценариях DTrace к разным уровням в зависимости от потребности. Таблица 12-3 перечисляет уровни определения объема для переменных и синтаксис для использования переменных на каждом уровне.

Табличный 12-3  объем Переменной в сценариях DTrace

Объем

Пример синтаксиса

Описание

Глобальная переменная

myGlobal = 1;

Глобальные переменные идентифицируются просто с помощью имени переменной. Все тестовые действия со всеми системными потоками имеют доступ к переменным в этом пространстве.

Поток

self->myThreadVar = 1;

Локальные переменные потока разыменовываются от self ключевое слово. Все тестовые действия, работающие на том же потоке, имеют доступ к переменным в этом пространстве. Вы могли бы использовать этот объем для сбора данных в течение нескольких выполнений действия зонда с текущим потоком.

Зонд

this->myLocalVar = 1;

Тестовые локальные переменные разыменовываются с помощью this ключевое слово. Только текущий рабочий зонд имеет доступ к переменным в этом пространстве. Как правило, Вы используете этот объем для определения временных переменных, которые Вы хотите, чтобы ядро очистило, когда заканчивается текущее действие.

Нахождение ошибок сценария

Если код сценария для одного из Ваших пользовательских инструментов содержит ошибку, Инструменты выводит на экран сообщение об ошибке в области дорожки, когда DTrace компилирует сценарий. Инструменты сообщают об ошибке после нажатия Кнопки записи в документе трассировки, но прежде, чем проследить фактически начинается. В сообщении об ошибке пузырь является кнопкой Edit. Нажатие этой кнопки открывает инструментальный лист конфигурации, теперь идентифицирующий зонд с ошибкой.

Экспорт сценарии DTrace

Несмотря на то, что Инструменты обеспечивают удобный интерфейс для сбора данных трассировки, существуют все еще времена, когда более удобно собрать данные трассировки непосредственно с помощью DTrace. Если Вы - системный администратор или пишете автоматизированные сценарии тестирования, например, Вы могли бы предпочесть использовать интерфейс командной строки DTrace, чтобы запустить процесс и собрать данные. Используя командную строку инструмент требует, чтобы Вы записали свои собственные сценарии DTrace, которые могут быть трудоемкими и могут привести к ошибкам. Если у Вас уже есть документ трассировки с одним или более находящимися в DTrace инструментами, можно использовать Инструментальное приложение для генерации сценария DTrace, обеспечивающего то же поведение как инструменты в документе трассировки.

Инструментальные поддержки, экспортирующие сценарии DTrace только для документов, где все инструменты основываются на DTrace. Это означает, что Ваш документ может включать пользовательские инструменты и ряд встроенные инструменты, такие как инструменты в группах Файловой системы и CoreData в окне Library.

bullet
Экспортировать сценарий DTrace
  1. Выберите документ трассировки.

  2. Нажмите File> DTrace Script Export.

  3. Введите имя для сценария DTrace.

  4. Выберите расположение для сценария DTrace.

  5. Нажмите Save.

Команда DTrace Script Export помещает команды сценария для Ваших инструментов в текстовом файле, который можно тогда передать dtrace инструмент командной строки с помощью -s опция. Например, если Вы экспортируете названный сценарий MyInstrumentsScript.d, выполните его от Терминала с помощью следующей команды:

sudo dtrace -s MyInstrumentsScript.d

Другое преимущество экспорта Ваших сценариев от Инструментов (в противоположность записи их вручную) состоит в том, что после выполнения сценария, можно импортировать получающиеся данные назад в Инструменты и рассмотреть его там. Сценарии, экспортируемые от Инструментов, распечатывают маркер запуска (с текстом dtrace_output_begin) в начале вывода DTrace. Для сбора данных просто скопируйте весь вывод DTrace (включая маркер запуска) от Терминала и вставьте его в текстовый файл, или просто перенаправьте вывод от dtrace оснастите непосредственно к файлу. Для импорта данных в Инструментах выберите документ трассировки, из которого Вы генерировали исходный сценарий, и выберите File> DTrace Data Import.