АнглийскийФранцузскийИспанский

Значок OnWorks

stap - Интернет в облаке

Запустите stap в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это командная строка, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


stap - переводчик / драйвер скрипта systemtap

СИНТАКСИС


НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] ИМЯ ФАЙЛА [ АРГУМЕНТЫ ]
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] - [ АРГУМЕНТЫ ]
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] -e SCRIPT [ АРГУМЕНТЫ ]
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] -l PROBE [ АРГУМЕНТЫ ]
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] -L PROBE [ АРГУМЕНТЫ ]
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] - типы-свалки
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] --dump-probe-псевдонимы
НТКГ [ ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ] --dump-функции

ОПИСАНИЕ


Команда НТКГ Программа является интерфейсом для инструмента Systemtap. Принимает инструкции по зондированию
написан на простом предметно-ориентированном языке, переводит эти инструкции в код C,
компилирует этот код C и загружает полученный модуль в работающее ядро ​​Linux или
Мутатор пользовательского пространства DynInst для выполнения запрошенных функций системной трассировки / проверки. Ты
может предоставить сценарий в именованном файле (FILENAME) из стандартного ввода (используйте - вместо
FILENAME) или из командной строки (используя -e SCRIPT). Программа работает до тех пор, пока не будет
прервано пользователем, или если скрипт добровольно вызывает Выход() функция, или
достаточное количество мягких ошибок.

Язык, на котором описывается SCRIPT АНГЛИЙСКИЙ ЯЗЫК раздел ниже, строго типизирован,
выразительный, свободный от деклараций, процедурный, удобный для прототипирования и вдохновленный AWK и C.
Он позволяет связывать точки исходного кода или события в системе с обработчиками, которые
подпрограммы, которые выполняются синхронно. Концептуально это несколько похоже на
"списки команд точки останова" в GDB отладчик.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


Переводчик systemtap поддерживает следующие параметры. Любой другой вариант печатает список
поддерживаемых опций. Как обычно, параметры могут быть заданы в командной строке. Если файл
$ SYSTEMTAP_DIR / rc существует, параметры также загружаются оттуда и сначала интерпретируются.
($ SYSTEMTAP_DIR по умолчанию - $ HOME / .systemtap, если не задано.)

- Использовать стандартный ввод вместо заданного ИМЯ ФАЙЛА в качестве ввода языка проверки, если не -e
СЦЕНАРИЙ дан.

-h --Помогите
Показать справочное сообщение.

-V --версия
Показать сообщение о версии.

-p NUM Остановитесь после прохода NUM. Проходы пронумерованы от 1 до 5: разобрать, разработать, перевести,
компилировать, запускать. Увидеть ОБРАБОТКА раздел для деталей.

-v Увеличьте многословность для всех передач. Выпустить больший объем информативной (?)
выводить каждый раз, когда опция повторяется.

--вп ABCDE
Повышайте уровень детализации для каждого прохода. Например, «--vp 002» добавляет 2 единицы
многословие пройти только 3. Комбинация "-v --vp 00004" добавляет 1 единицу подробности.
за все проходы и еще 4 за проход 5.

-k Сохраните временный каталог после всей обработки. Это может быть полезно для
проверить сгенерированный код C или повторно использовать скомпилированный объект ядра.

-g Режим гуру. Разрешить анализ небезопасных конструкций экспертного уровня, таких как встроенный C.

-P Режим поиска пролога. Это эквивалентно --prologue-search = always.
Активируйте эвристику, чтобы обойти неверную отладочную информацию для функции
параметр $ переменные контекста.

-u Неоптимизированный режим. Отключите неиспользуемый код исключения и многие другие оптимизации во время
разработка / перевод.

-w Режим подавленных предупреждений. Отключает все предупреждающие сообщения.

-W Считайте все предупреждения ошибками.

-b Используйте массовый режим (файлы percpu) для передачи данных от ядра к пользователю. Использовать скоба-слияние
программа, чтобы объединить их вместе позже.

-t Собирать временную информацию о количестве запусков зондирования и средней сумме
времени, проведенного в каждой точке зондирования. Также показывает вывод для каждой точки измерения.

-sNUM Используйте NUM мегабайтных буферов для передачи данных от ядра к пользователю. На мультипроцессоре в
объемный режим, это количество на процессор.

-I DIR Добавьте данную директорию в поисковую директорию Tapset. См. Описание
пройдите 2 для деталей.

-D ИМЯ = ЗНАЧЕНИЕ
Добавьте указанную директиву препроцессора C в Makefile модуля. Их можно использовать
для отмены предельных параметров, описанных ниже.

-B ИМЯ = ЗНАЧЕНИЕ
Добавьте указанную директиву make к вызову make сборки модуля ядра. Эти
может использоваться для добавления или переопределения параметров kconfig.

-a ARCH
Используйте режим кросс-компиляции для данной целевой архитектуры. Это требует
доступ к кросс-компилятору и дереву сборки ядра, а также -B
CROSS_COMPILE = арка-инструмент-префикс- и -r / build / дерево настройки.

--modinfo ИМЯ = ЗНАЧЕНИЕ
Добавьте пару имя / значение в качестве вызова макроса MODULE_INFO в сгенерированный модуль. Этот
может быть полезно для информирования или отмены различных связанных с модулем проверок в ядре.

-G ИМЯ = ЗНАЧЕНИЕ
Устанавливает для глобальной переменной NAME значение VALUE при вызове staprun. Этот
применяется к скалярным переменным, объявленным глобальным в скрипте / наборе.

-R DIR Ищите источники времени выполнения systemtap в данном каталоге.

-r / DIR
Сборка для ядра в данном дереве сборки. Также можно установить с помощью СИСТЕМАTAP_RELEASE
переменная среды.

-r РЕЛИЗ
Сборка для ядра в дереве сборки / lib / модули / RELEASE / build. Также можно установить с помощью
СИСТЕМАTAP_RELEASE переменная среды.

-m МОДУЛЬ
Используйте данное имя для сгенерированного объектного модуля ядра вместо уникального
рандомизированное имя. Сгенерированный объектный модуль ядра копируется в текущий
каталог.

-d МОДУЛЬ
Добавить символьную / раскручивающую информацию для данного модуля в объектный модуль ядра.
Это может включить символическую обратную трассировку из этих модулей / программ, даже если они
не помещать в них явный зонд.

--ldd Добавьте информацию о символах / разворотах для всех разделяемых библиотек, которые, по подозрению ldd,
необходимо для двоичных файлов пользовательского пространства, которые проверяются или перечисляются с параметром -d.
Внимание: это может значительно увеличить размеры модулей датчиков.

--all-модули
Эквивалентно указанию "-dkernel" и "-d" для каждого модуля ядра, который
в настоящее время загружен. Внимание: это может значительно увеличить размеры модулей датчиков.

-o ФАЙЛОВ
Отправьте стандартный вывод в указанный файл. В массовом режиме файлы percpu начинаются с
FILE_ (FILE_cpu с -F), за которым следует номер процессора. Это поддерживает стрфтайм(3)
форматы для ФАЙЛА.

-c CMD Запустите зонды, запустите CMD и выйдите, когда CMD завершит работу. Это также имеет эффект
установка target () на pid запущенной команды.

-x PID Устанавливает target () в PID. Это позволяет писать сценарии, которые фильтруют определенные
процесс. Скрипты выполняются независимо от продолжительности жизни PID.

-e SCRIPT
Запустите данный СЦЕНАРИЙ, указанный в командной строке.

-E SCRIPT
Запустите указанный СКРИПТ. Этот СКРИПТ запускается в дополнение к основному скрипту.
указан, через -e или как файл сценария. Эту опцию можно повторить, чтобы запустить
несколько скриптов и могут использоваться в режиме листинга (-l / -L).

-l PROBE
Вместо того, чтобы запускать сценарий проверки, просто перечислите все доступные точки проверки, соответствующие
заданная единственная точка измерения. Шаблон может включать подстановочные знаки и псевдонимы, но
несколько точек измерения, не разделенных запятыми. Код результата процесса укажет
сбой, если совпадений нет.

-L PROBE
Аналогично "-l", но перечисляет точки проверки и локальные переменные уровня скрипта.

-F Без опции -o загрузите модуль и запустите зонды, затем отсоедините от модуля
оставляя зонды включенными. С параметром -o запустить staprun в фоновом режиме как демон
и покажи его пид.

-S размер [, N]
Устанавливает максимальный размер выходного файла и максимальное количество выходных файлов. Если
размер выходного файла превысит размер , systemtap переключает выходной файл на
следующий файл. И если количество выходных файлов превышает N , systemtap удаляет
самый старый выходной файл. Второй аргумент можно опустить.

--скип-бадварс
Игнорировать неразрешимые или недоступные во время выполнения контекстные переменные и заменить их на
0, без ошибок.

--поиск пролога[=КОГДА]
Режим поиска пролога. Активируйте эвристику, чтобы обойти некорректную отладку
информация для параметра функции $ переменных контекста. КОГДА может быть либо
«никогда», «всегда» или «авто» (т.е. разрешено эвристикой). Если КОГДА отсутствует, то
предполагается "всегда". Если опция отсутствует, предполагается «авто».

--suppress-обработчик-ошибок
Оберните все обработчики зондов примерно так

попробуй {...} поймать {дальше}

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

--совместимый Версия
Подавить недавние изменения языка сценария или набора кнопок, которые несовместимы с заданными
старая версия systemtap. Это может быть полезно, если более старый скрипт systemtap
не запускается. См. Более подробную информацию в разделе УСТАРЕНИЕ.

--check-версия
Эта опция используется для проверки наличия в активном скрипте каких-либо конструкций, которые могут быть
зависит от версии systemtap. См. Более подробную информацию в разделе УСТАРЕНИЕ.

--чистый-кэш
Эта опция удаляет устаревшие записи из каталога кеша. Это обычно делается
автоматически после успешных запусков, но эта опция вызовет очистку
вручную, а затем выйдите. См. Раздел КЭШИНГ для получения более подробной информации о кешировании.
пределы.

--цвет[=КОГДА], --цвет[=КОГДА]
Эта опция контролирует окраску сообщений об ошибках. КОГДА может быть либо «никогда»,
«всегда» или «авто» (т.е. разрешать только на терминале). Если КОГДА отсутствует, то
предполагается "всегда". Если опция отсутствует, предполагается «авто».

Цвета можно изменить с помощью переменной среды SYSTEMTAP_COLORS. Формат
должен иметь форму key1=val1:key2=val2:key3=val3 ...и т.д. Действительные ключи - «ошибка»,
«предупреждение», «источник», «каретка» и «токен». Значения составляют Select Graphic
Параметр (ы) воспроизведения (SGR). Обратитесь к документации вашего терминала для
SGR поддерживает. Например, цвета по умолчанию могут быть выражены как
error=01;31:warning=00;33:source=00;34:caret=01:token=01. Если SYSTEMTAP_COLORS -
отсутствует, будут использоваться цвета по умолчанию. Если он пуст или недействителен, раскраска
выключен.

--отключить-кэш
Этот параметр запрещает любое использование каталога кеша. Никакие файлы не будут прочитаны
из или записанные в кеш.

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

- привилегия[=стапуср | знак равноStapsys | знак равностапдев]
Эта опция указывает НТКГ исследовать сценарий в поисках конструкций, которые
не разрешено для указанного уровня привилегий (см. БЕЗПРИВИЛЕГИРОВАННЫЙ пОЛЬЗОВАТЕЛЕЙ).
Компиляция не выполняется, если используются какие-либо такие конструкции. Если стапуср or Stapsys
указывается при использовании сервера компиляции (см. --use-сервер), сервер проверит
скрипт и, если компиляция завершится успешно, сервер криптографически подпишет
полученный модуль ядра, удостоверяющий, что он безопасен для использования пользователями на
указанный уровень привилегий.

If - привилегия не указано, -пН не было указано с N <5, и
вызывающий пользователь не корень, и не является членом группы стапдев, то НТКГ
автоматически добавит соответствующий - привилегия вариант к вариантам уже
указано.

- непривилегированный
Этот вариант эквивалентен --privilege = stapusr.

--use-сервер[=HOSTNAME[: ПОРТ] | знак равноАЙПИ АДРЕС[: ПОРТ] | знак равноCERT_SERIAL]
Укажите сервер (ы) компиляции, который будет использоваться для компиляции и / или в сочетании с
--list-серверы и - доверительные серверы (увидеть ниже). Если аргумент не указан, то
по умолчанию в непривилегированном режиме (см. - привилегия) - выбрать совместимые серверы
которым доверяют как узлы SSL, подписавшие модули и которые в настоящее время находятся в сети.
В противном случае по умолчанию выбираются совместимые серверы, которым доверяют как SSL.
сверстники и в настоящее время онлайн. --use-сервер может быть указано более одного раза, в котором
если список серверов накапливается в указанном порядке. Серверы могут быть
указывается именем хоста, IP-адресом или серийным номером сертификата (полученным с помощью
--list-серверы). Последний чаще всего используется при добавлении или отмене доверия к
сервер (см. - доверительные серверы ниже). Если сервер указан по имени хоста или IP
адрес, то можно указать необязательный номер порта. Это полезно для
доступ к серверам, которые не находятся в локальной сети, или указать конкретный
сервера.

IP-адреса могут быть адресами IPv4 или IPv6.

Если конкретный IPv6-адрес является локальным для ссылки и существует более чем на одном интерфейсе,
предполагаемый интерфейс можно указать, добавив к адресу процент
знак (%), за которым следует предполагаемое имя интерфейса. Например,
"fe80::5eff:35ff:fe07:55ca%eth0".

Чтобы указать номер порта с IPv6-адресом, необходимо заключить
адрес IPv6 в квадратных скобках ([]), чтобы отделить номер порта от
остальная часть адреса. Например, «[fe80 :: 5eff: 35ff: fe07: 55ca]: 5000» или
"[fe80::5eff:35ff:fe07:55ca%eth0]:5000".

If --use-сервер не указано, -пН не было указано с N <5, и
вызывающий пользователь не корень, не является членом группы стапдев, но является членом
группы стапуср, то НТКГ автоматически добавит --use-сервер к вариантам
уже указано.

--use-сервер-при-ошибке[=Да|=нет]
Дает команду stap повторить попытку компиляции сценария с использованием сервера компиляции, если
компиляция на локальном хосте не выполняется таким образом, что предполагает, что это может
успешно использовать сервер. Если этот параметр не указан, по умолчанию используется нет. Если нет
указан аргумент, то по умолчанию Да. Компиляция будет повторена для
определенные типы ошибок (например, нехватка данных или ресурсов), которые могут не возникать
во время повторной компиляции компилирующим сервером. Будут выбраны серверы компиляции
автоматически для попытки повторной компиляции, как если бы --use-сервер был указан с
без аргументов.

--list-серверы[= СЕРВЕРЫ]
Показать статус запрошенного СЕРВЕРЫ, Где СЕРВЕРЫ через запятую
список атрибутов сервера. Список атрибутов объединен для фильтрации списка
отображены серверы. Поддерживаемые атрибуты:

ВСЕ указывает все известные серверы (доверенные узлы SSL, доверенные подписчики модулей,
онлайн-серверы).

указанный
указывает серверы, указанные с помощью --use-сервер.

онлайн фильтрует вывод, сохраняя информацию о серверах, которые
в настоящее время онлайн.

надежных
фильтрует вывод, сохраняя информацию о серверах, которым доверяют
как партнеры SSL.

подписавшийся фильтрует вывод, сохраняя информацию о серверах, которым доверяют
как подписывающие модули (см. - привилегия).

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

Если аргумент не указан, по умолчанию используется указанный. Если бы серверов не было
указано с использованием --use-сервер, то серверы по умолчанию для --use-сервер перечислены.

Обратите внимание, что --list-серверы использует авахи-демон сервис для обнаружения онлайн-серверов. Если
эта услуга недоступна, тогда --list-серверы не обнаружит ни одного онлайн
серверы. Для того чтобы --list-серверы для обнаружения серверов, прослушивающих адреса IPv6,
авахи-демон файл конфигурации /etc/avahi/avahi-daemon.conf должен содержать
активная строка "use-ipv6 = yes". После добавления этой строки в
порядок включения IPv6.

- доверительные серверы[= TRUST_SPEC]
Предоставить или отозвать доверие к компиляторам, указанным с помощью --use-сервер как указано
на TRUST_SPEC, где TRUST_SPEC - это список, разделенный запятыми, определяющий доверие
который должен быть предоставлен или отозван. Поддерживаемые элементы:

SSL доверять указанным серверам как партнерам SSL.

подписавшийся доверять указанным серверам как подписчикам модулей (см. - привилегия). Только рут
можно указать подписывающее лицо.

все пользователи
предоставить доверие в качестве узла ssl для всех пользователей на локальном хосте. По умолчанию
чтобы предоставить доверие как одноранговый узел ssl только для текущего пользователя. Доверие как модуль
подписывающее лицо всегда предоставляется всем пользователям. Только root может указать все пользователи.

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

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

Если аргумент не указан, по умолчанию используется SSL. Если не указаны серверы
через --use-сервер, то доверие не будет предоставлено или отозвано.

Если не без подсказки был указан, пользователю будет предложено подтвердить доверие
быть предоставленным или отозванным до выполнения операции.

- типы-свалки
Выводит список поддерживаемых типов проб и выходов. Если --privilege = stapusr Также
Если указано, список будет ограничен типами зондов, доступными непривилегированным пользователям.

--dump-probe-псевдонимы
Выводит список всех псевдонимов зондов, найденных в файлах библиотеки, и завершает работу.

--dump-функции
Выводит список всех функций, найденных в файлах библиотеки, и завершает работу. Также включает их
параметры и типы. Функция типа "неизвестно" указывает на функцию, которая выполняет
не вернуть значение. Обратите внимание, что не все типы функций / параметров могут быть разрешены
(они также обозначены словом «неизвестно»). Эта функция очень интенсивно использует память и
таким образом может не работать должным образом с --use-сервер если целевой сервер налагает rlimit
в памяти процесса (т. е. через ~ stap-сервер / .systemtap / rc конфигурационный файл,
посмотреть stap-сервер(8 г.)).

--дистанционный пульт URL
Установите цель выполнения на данный хост. Эта опция может быть повторена для целевого
несколько целей исполнения. Проходы 1-4 выполняются на месте как обычно для строительства
сценарий, а затем передача 5 скопирует модуль в цель и запустит его.
Допустимые формы URL включают:

[ПОЛЬЗОВАТЕЛЬ @] HOSTNAME, ssh: // [ПОЛЬЗОВАТЕЛЬ @] ИМЯ ХОСТА
В этом режиме используется ssh, при желании можно использовать имя пользователя, не совпадающее с вашим. Если
пользовательский файл ssh_config используется, добавьте ОтправитьEnv ДЛИННЫЙ сохранить
функциональность интернационализации.

libvirt: // ДОМЕН, libvirt: // ДОМЕН / LIBVIRT_URI
Этот режим использует стапвирт для выполнения скрипта в домене, управляемом
libvirt. При желании можно указать LIBVIRT_URI для подключения к определенному
драйвер и / или удаленный хост. Например, для подключения к локальному привилегированному
Драйвер QEMU, используйте:

--remote libvirt: // MyDomain / qemu: /// system

См. Страницу по адресуhttp://libvirt.org/uri.html> для поддерживаемых URI. Также см
стапвирт(1) для получения дополнительной информации о том, как подготовить домен для stap
зондирование.

unix: ПУТЬ
Этот режим подключается к сокету UNIX. Это можно использовать с вирусом QEMU.
последовательный порт для выполнения сценариев внутри работающей виртуальной машины.

непосредственный://
Специальный режим обратной петли для работы на локальном хосте.

--remote-префикс
Префикс каждой строки удаленного вывода с "N:", где N - индекс удаленного
цель выполнения, из которой возникла данная строка.

--download-debuginfo[= ВАРИАНТ]
Включение, отключение или установка тайм-аута для функции автоматической загрузки отладочной информации
предлагается abrt, как указано в OPTION, где OPTION является одним из следующих:

Да включить автоматическую загрузку debuginfo без тайм-аута. Это тоже самое
как не предоставляющий значение OPTION для --download-debuginfo

нет явно отключить автоматическую загрузку debuginfo. Это то же самое, что и
вообще не использую эту опцию.

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


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

--rlimit-as= ЧИСЛО
Укажите максимальный размер виртуальной памяти (адресного пространства) процесса в байтах.
Если ничего не указано, никаких ограничений не налагается.

--rlimit-процессор= ЧИСЛО
Укажите ограничение времени ЦП в секундах. Если ничего не указано, ограничений нет.
наложены.

--rlimit-nproc= ЧИСЛО
Укажите максимальное количество процессов, которые можно создать. Если ничего нет
указано, никаких ограничений не налагается.

--rlimit-стек= ЧИСЛО
Укажите максимальный размер стека процесса в байтах. Если ничего не указано,
никаких ограничений нет.

--rlimit-fsize= ЧИСЛО
Укажите максимальный размер файлов, которые может создать процесс, в байтах. Если ничего
указано, никаких ограничений не налагается.

--sroot= DIR
Укажите каталог sysroot, в котором находятся целевые файлы (исполняемые файлы, библиотеки и т. Д.).
расположена. С участием -r РЕЛИЗ, sysroot будет искать соответствующее ядро
каталог сборки. С участием -r / DIR, однако, sysroot не будет использоваться для поиска
сборка ядра.

--sysenv= VAR = VALUE
Укажите альтернативное значение для переменной среды, где значение на удаленном
система отличается. Предполагается, что переменные пути (например, PATH, LD_LIBRARY_PATH)
относительно каталога, предоставленного --sroot, если предусмотрено.

-suppress-time-limits
Отключите параметры, связанные с -DSTP_OVERLOAD, а также -DMAXACTION и -DMAXTRYLOCK.
Эта опция требует режима гуру.

- время выполнения= РЕЖИМ
Установите режим выполнения pass-5. Допустимые варианты: ядро (по умолчанию) и дининст. Посмотреть
АЛЬТЕРНАТИВНЫЙ РАСХОДЫ ниже для получения дополнительной информации.

--dyninst
Сокращение для --runtime = dyninst.

--сохранить-халаты
На машинах, которым требуется SystemTap для создания собственного модуля uprobes (ядра до
до версии 3.5), этот параметр указывает SystemTap также сохранить копию модуля
в текущем каталоге (сначала создавая новый каталог «uprobes»).

--целевые пространства имен= PID
Разрешить установку набора целевых пространств имен на основе пространств имен заданного
PID находится в. Это для функций Tapset с учетом пространства имен. Если целевые пространства имен
не был установлен, по умолчанию в качестве цели используются пространства имен stap-процесса.

АРГУМЕНТЫ


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

SCRIPT АНГЛИЙСКИЙ ЯЗЫК


Язык скрипта systemtap похож на AWK и C. Есть два основных внешних
конструкции: зонды и функции. Внутри них операторы и выражения используют C-подобный
синтаксис и приоритет оператора.

ОБЩАЯ ИНФОРМАЦИЯ СИНТАКСИС
Пробелы игнорируются. Поддерживаются три формы комментариев:
# ... стиль оболочки до конца строки, кроме $ # и @ #
// ... Стиль C ++, до конца строки
/* ... стиль C ... */
Литералы - это либо строки, заключенные в двойные кавычки (проходящие через обычный escape-код языка C).
коды с обратной косой чертой и со смежными строковыми литералами, склеенными вместе, также как в C),
или целые числа (в десятичном, шестнадцатеричном или восьмеричном формате, используя ту же нотацию, что и в C). Все
строки ограничены по длине до некоторого разумного значения (несколько сотен байтов). Целые числа
являются 64-битными величинами со знаком, хотя синтаксический анализатор также принимает (и оборачивает) значения
выше положительного 2 ** 63.

Кроме того, могут быть вставлены аргументы сценария, указанные в конце командной строки. Использовать
$1 ... $ для вставки без кавычек, @1 ... @ для вставки в виде строкового литерала. В
количество аргументов может быть доступно через $# (как число без кавычек) или через @# (как
цитируемый номер). Их можно использовать в любом месте, где может начаться токен, в том числе в пределах
этап предварительной обработки. Ссылка на номер аргумента сверх того, что было на самом деле дано, является
ошибка.

ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА
Простой этап условной предварительной обработки выполняется как часть синтаксического анализа. Общая форма
похож на конд ? опыт1 : Тернарный оператор exp2:

%( СОСТОЯНИЕ %? ИСТИННЫЕ ЖЕТОНЫ %)
%( СОСТОЯНИЕ %? ИСТИННЫЕ ЖЕТОНЫ %: ЛОЖНЫЕ ЖЕТОНЫ %)

УСЛОВИЕ - это либо выражение, формат которого определяется его первым ключевым словом, либо
сравнение строковых литералов или сравнение числовых литералов. Он также может состоять из
много альтернатив и союзов УСЛОВИЙ (обозначенных как в предыдущем предложении) с использованием ||
и && соответственно. Однако круглые скобки пока не поддерживаются, поэтому помните, что
соединение имеет приоритет над альтернативой.

Если первая часть - это идентификатор kernel_vr or ядро_v для обозначения версии ядра
номер с ("2.6.13-1.322FC3smp") или без ("2.6.13") суффикса кода выпуска, затем
вторая часть - один из шести стандартных числовых операторов сравнения <, <=, ==, !=, >,
и >=, а третья часть - это строковый литерал, содержащий версию выпуска в стиле RPM.
ценность. Условие считается выполненным, если версия целевого ядра (как
опционально переопределено -r option) сравнивается со строкой данной версии. В
сравнение выполняется функцией glibc стрверскмп. В частном случае, если
оператор для простого равенства (==), либо неравенство (!=), а третья часть содержит любые
символы подстановки (* or ? or [), то выражение рассматривается как совпадение с подстановочным знаком (ошибочное)
по оценке фнматч.

Если, с другой стороны, первая часть - это идентификатор арка ссылаться на процессор
архитектура (как названо системой сборки ядра ARCH / SUBARCH), тогда вторая часть
один из двух операторов сравнения строк == or !=, а третья часть - строка
буквальный для сопоставления. Это сравнение является ошибочным (ошибочным) совпадением.

Точно так же, если первая часть является идентификатором типа CONFIG_что-то ссылаться на ядро
вариант конфигурации, то вторая часть == or !=, а третья часть - строка
литерал для сопоставления значения (обычно «y» или «m»). Несуществующее или неустановленное ядро
параметры конфигурации представлены пустой строкой. Это сравнение также
подстановочный знак (неправильное) совпадение.

Если первая часть - это идентификатор systemtap_v, тест относится к системному тэпу
версия совместимости, которая может быть переопределена для старых сценариев с помощью --совместимый флаг.
Оператор сравнения такой же, как и для ядро_v а правый операнд - это строка версии.
См. Также раздел УСТАРЕНИЕ ниже.

Если первая часть - это идентификатор систематап_привилегия, тест относится к привилегии
уровень, на котором скомпилирован скрипт systemtap. Здесь вторая часть == or !=и
третья часть - это строковый литерал, «stapusr», «stapsys» или «stapdev».

Если первая часть - это идентификатор гуру_режим, тест относится к тому, если скрипт systemtap
компилируется с помощью guru_mode. Здесь вторая часть == or !=, а третья часть - это
число, либо 1, либо 0.

Если первая часть - это идентификатор время выполнения, тест относится к среде выполнения systemtap
режим. Видеть АЛЬТЕРНАТИВНЫЙ РАСХОДЫ ниже для получения дополнительной информации о времени выполнения. Вторая часть
один из двух операторов сравнения строк == or !=, а третья часть - строка
буквальный для сопоставления. Это сравнение является ошибочным (ошибочным) совпадением.

В противном случае ожидается, что УСЛОВИЕ будет сравнением двух строковых литералов или двух
числовые литералы. В этом случае можно использовать только аргументы.

TRUE-TOKENS и FALSE-TOKENS - это ноль или более общих токенов парсера (возможно,
включая вложенные условия препроцессора) и передаются во входной поток, если
условие истинно или ложно. Например, следующий код вызывает ошибку синтаксического анализа, если только
версия целевого ядра новее 2.6.5:

% (kernel_v <= "2.6.5"%? ** ERROR **%) # неверная последовательность токенов

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

зонд kernel.function (
% (kernel_v <= "2.6.12"%? "__mm_do_fault"%:
% (kernel_vr == "2.6.13 * smp"%? "do_page_fault"%:
НЕ ПОДДЕРЖИВАЕТСЯ %) %)
) {/ * ... * /}

% (arch == "ia64"%?
probe syscall.vliw = kernel.function ("vliw_widget") {}
%)

ПРЕДПРОЦЕССОР МАКРОСЫ
Препроцессор также поддерживает простую функцию макроса, выполняемую как отдельный проход перед
условная предварительная обработка.

Макросы определяются с помощью следующей конструкции:

@define ИМЯ% (ТЕЛО%)
@define ИМЯ (ПАРАМЕТР_1, ПАРАМ_2, ...)% (ТЕЛО%)

Макросы и параметры внутри тела макроса вызываются с помощью префикса имени макроса.
с символом @:

@define foo% (x%)
@define add (a, b)% (((@a) + (@ b))%)

@foo = @add (2,2)

В настоящее время расширение макроса выполняется на отдельном проходе перед условной компиляцией.
Следовательно, токены TRUE и FALSE в условных выражениях будут макрорасширены.
независимо от того, как оценивается состояние. Иногда это может приводить к ошибкам:

// Следующее приводит к конфликту:
% (CONFIG_UTRACE == "y"%?
@define foo% (process.syscall%)
%:
@define foo% (** ОШИБКА **%)
%)

// Следующее работает должным образом:
@define foo% (
% (CONFIG_UTRACE == "y"%? Process.syscall%: ** ERROR **%)
%)

Первый пример неверен, потому что оба @define оцениваются на проходе до
условно оценивается.

Обычно определение макроса является локальным для файла, в котором оно встречается. Таким образом, определение макроса в
Tapset не делает его доступным для пользователя Tapset. Общедоступно
макросы библиотеки можно определить, включив файлы .stpm в путь поиска тапсета. Эти
файлы могут содержать только конструкции @define, которые становятся видимыми во всех наборах и
пользовательские скрипты.

ПЕРЕМЕННЫЕ
Идентификаторы переменных и функций представляют собой буквенно-цифровую последовательность и могут включать: _
и $ символы. Они не могут начинаться с простой цифры, как в C. Каждая переменная
по умолчанию локально для блока проверки или инструкции функции, в котором он упоминается, и
поэтому его объем и время жизни ограничены конкретным вызовом зонда или функции.

Скалярные переменные неявно типизируются как строковые или целочисленные. Ассоциативные массивы
также имеют строковое или целочисленное значение, а также кортеж строк и / или целых чисел, служащих
ключ. Вот несколько основных выражений.

переменная1 = 5
var2 = "бар"
array1 [pid ()] = "name" # одиночный числовой ключ
array2 ["foo", 4, i ++] + = 5 # вектор ключей string / num / num
if (["привет", 5,4] в массиве2) println ("да") # проверка членства

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

Переменные могут быть объявлены глобальными, чтобы они были общими для всех зондов и существовали как
пока весь сеанс systemtap. Для всех глобальных переменных существует одно пространство имен,
независимо от того, в каком файле сценария они находятся. Одновременный доступ к глобальным
переменные автоматически защищены блокировками, см. БЕЗОПАСНОСТЬ И БЕЗОПАСНОСТЬ раздел для
подробнее. Глобальное объявление может быть написано на самом внешнем уровне где угодно, но не
внутри блока кода. Глобальные переменные, которые записываются, но никогда не читаются, будут
отображается автоматически при завершении сеанса. Переводчик выведет для каждого его значение
type, а если он используется как массив, его ключевые типы. Необязательно, скалярные глобальные объекты могут быть
инициализируется строковым или числовым литералом. Следующее объявление помечает переменные как
глобальный характер.

Глобальный var1, var2, var3 = 4

Глобальные переменные также могут быть установлены как опции модуля. Это можно сделать либо с помощью -G
вариант, или модуль должен быть сначала скомпилирован с помощью stap -p4. Затем глобальные переменные могут быть
устанавливается в командной строке при вызове staprun для модуля, созданного с помощью stap -p4. Видеть
Staprun(8) для получения дополнительной информации.

Размер массивов ограничен переменной MAXMAPENTRIES - см. БЕЗОПАСНОСТЬ И БЕЗОПАСНОСТЬ
раздел для деталей. По желанию, глобальные массивы могут быть объявлены с максимальным размером в
скобки, заменяющие MAXMAPENTRIES только для этого массива. Обратите внимание, что это не означает
тип ключей для массива, только размер.

Глобальный tiny_array [10], нормальный_массив, большой_массив [50000]

Массивы могут быть настроены для обертывания с использованием суффикса «%». Это заставляет старые элементы
перезаписывается, если вставлено больше элементов, чем может вместить массив. Это работает как для
ассоциативные и статистические массивы.

Глобальный wrapped_array1% [10], завернутый_массив2%

Многие типы точек тестирования безопасно предоставляют контекстные переменные, которые являются значениями времени выполнения.
извлекается из исследуемой программы ядра или пользовательского пространства. Они имеют префикс
$ персонаж. Раздел КОНТЕКСТОВЫЕ ПЕРЕМЕННЫЕ в щупы(3stap) перечисляет то, что доступно
для каждого типа точки измерения. Эти переменные контекста становятся обычными строковыми или числовыми
скаляры после того, как они сохранены в обычных переменных скрипта. См. Раздел TYPECASTING.
ниже о том, как превратить их обратно в типизированные указатели для дальнейшей обработки в качестве контекста.
переменные.

ОТЧЕТНОСТЬ
Операторы позволяют выполнять процедурный поток управления. Они могут возникать внутри функций и зонда.
обработчики. Общее количество операторов, выполненных в ответ на любое отдельное событие зондирования.
ограничено некоторым числом, определенным макросом в переведенном коде C, и находится в
окрестности 1000.

EXP Выполнить строковое или целочисленное выражение и выбросить значение.

{ СТМТ1 СТМТ2 ... }
Выполняйте каждую инструкцию последовательно в этом блоке. Обратите внимание, что разделители или
терминаторы между операторами обычно не нужны.

; Нулевое заявление, ничего не делать. Это полезно как дополнительный разделитель между
операторы для улучшения обнаружения синтаксических ошибок и обработки определенной грамматики
двусмысленность.

if (ОПЫТ) STMT1 [ еще STMT2]
Сравните целочисленный EXP с нулем. Выполнить первый (ненулевой) или второй STMT
(нуль).

в то время как (ОПЫТ) СТМТ
Пока целочисленный EXP не равен нулю, выполните STMT.

для (EXP1; EXP2; EXP3) СТМТ
Выполните EXP1 как инициализацию. Пока EXP2 не равен нулю, выполните STMT, затем
итерационное выражение EXP3.

Еогеасп (ВАР in МНОЖЕСТВО [ предел EXP]) STMT
Переберите каждый элемент названного глобального массива, назначив текущий ключ переменной VAR.
Массив не может быть изменен внутри оператора. Добавив один + or -
после идентификатора VAR или ARRAY, итерация будет продолжаться в
отсортированный порядок, по возрастанию или убыванию индекса или значения. Если массив содержит
статистические агрегаты, добавляя желаемые @ оператор между идентификатором ARRAY
и + or - укажет агрегатную функцию сортировки. СМОТРЕТЬ СТАТИСТИКУ
раздел ниже для доступных. По умолчанию @считать. Использование необязательного предел
ключевое слово ограничивает количество итераций цикла до EXP раз. Опыт оценивается один раз
в начале цикла.

Еогеасп ([ВАР1, ВАР2, ...] in МНОЖЕСТВО [ предел EXP]) STMT
То же, что и выше, используется, когда массив индексируется с помощью кортежа ключей. Сортировка
суффикс может использоваться не более чем в одном идентификаторе VAR или ARRAY.

Еогеасп ([ВАР1, ВАР2, ...] in МАССИВ [ИНДЕКС1, ИНДЕКС2, ...] [ предел EXP]) STMT
То же, что и выше, где итерации ограничены элементами в массиве, где ключи
соответствуют указанным значениям индекса. Символ * может использоваться для указания индекса и
будет рассматриваться как подстановочный знак.

Еогеасп (ЗНАЧЕНИЕ = ВАР in МНОЖЕСТВО [ предел EXP]) STMT
Этот вариант foreach сохраняет текущее значение в VALUE на каждой итерации, поэтому
то же, что и ARRAY [VAR]. Это также работает с набором ключей. Сортировка суффиксов по
VALUE действует так же, как и ARRAY.

Еогеасп (ЗНАЧЕНИЕ = ВАР in МАССИВ [ИНДЕКС1, ИНДЕКС2, ...] [ предел EXP]) STMT
То же, что и выше, где итерации ограничены элементами в массиве, где ключи
соответствуют указанным значениям индекса. Символ * может использоваться для указания индекса и
будет рассматриваться как подстановочный знак.

перерыв, продолжать
Выйти или повторить самый внутренний цикл вложенности (в то время как or для or Еогеасп) утверждение.

возвращают EXP
Вернуть значение EXP из включающей функции. Если значение функции не берется
в любом месте, тогда оператор возврата не нужен, и функция будет иметь
специальный «неизвестный» тип без возвращаемого значения.

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

стараться {STMT1} поймать {STMT2}
Запустите операторы в первом блоке. При возникновении любых ошибок времени выполнения прервите STMT1 и
начать выполнение STMT2. Любые ошибки в STMT2 будут распространяться на внешний try / catch
блоки, если есть.

стараться {STMT1} поймать(VAR) {STMT2}
То же, что и выше, плюс присвойте сообщение об ошибке строковой скалярной переменной VAR.

удалять МАССИВ [ИНДЕКС1, ИНДЕКС2, ...]
Удалите из ARRAY элемент, указанный индексным кортежем. Если индексный кортеж
содержит * вместо индекса, * рассматривается как подстановочный знак и все элементы
с ключами, соответствующими индексному кортежу, будет удален из ARRAY. Значение не будет
будет доступен больше, и последующие итерации не будут сообщать об элементе. это
не ошибка удалить элемент, который не существует.

удалять МНОЖЕСТВО
Удалите все элементы из ARRAY.

удалять СКАЛЯРНЫЙ
Удаляет значение СКАЛЯР. Целые числа и строки очищаются до 0 и ""
соответственно, при этом статистика сбрасывается в исходное пустое состояние.

ВЫРАЖЕНИЯ
Systemtap поддерживает ряд операторов, которые имеют одинаковый общий синтаксис, семантику и
приоритет как в C и awk. Арифметика выполняется в соответствии с типичными правилами C для подписанных
целые числа. Обнаружено деление на ноль или переполнение, что приводит к ошибке.

двоичные числовые операторы
* / % + - >> << & ^ | && ||

бинарные строковые операторы
. (конкатенация строк)

числовые операторы присваивания
= *= /= %= += -= >> = << = &= ^= |=

операторы присваивания строк
= .=

унарные числовые операторы
+ - ! ~ ++ --

бинарные числовые операторы, операторы сравнения строк или сопоставления регулярных выражений
< > <= >= == != =~ !~

троичный оператор
конд ? опыт1 : опыт2

оператор группировки
( ехр )

вызов функции
fn ([аргумент1, аргумент2, ...])

проверка членства в массиве
ехр in массив
[опыт1, опыт2, ...] in массив
[*, *, ... ]in массив

ОЧЕРЕДНАЯ ЭКСПРЕССИЯ МАТЧИКИ
Язык сценариев поддерживает сопоставление регулярных выражений. Основной синтаксис такой:
следующим образом:

ехр =~ регулярное выражение
ехр !~ регулярное выражение

(Первый операнд должен быть выражением, вычисляющим строку; второй операнд должен
быть строковым литералом, содержащим синтаксически допустимое регулярное выражение.)

Синтаксис регулярных выражений поддерживает большинство функций POSIX Extended Regular.
Выражения, за исключением функции повторного использования подвыражений ("\ 1"). Возможность захвата
и извлеките содержимое совпадающей строки, а подвыражения еще не были
реализованы.

ЗОНДЫ
Основная конструкция языка сценариев идентифицирует зонды. Зонды связывают аннотация
события с блоком операторов («обработчик зонда»), который должен выполняться, когда любой из этих
события происходят. Общий синтаксис следующий:

зонд ПРОБОПОЧКА [, ПРОБНАЯ ТОЧКА] { [СТМТ...] }
зонд ПРОБОПОЧКА [, ПРОБНАЯ ТОЧКА] if (СОСТОЯНИЕ) { [СТМТ...] }

События указываются в специальном синтаксисе, который называется «точки проверки». Есть несколько
разновидности пробных точек, определяемые переводчиком, и сценарии Tapset могут определять дальнейшие
те, которые используют псевдонимы. Точки пробников могут быть обозначены символами подстановки, сгруппированы или перечислены в предпочтительном варианте.
последовательности или объявлены необязательными. Дополнительные сведения о синтаксисе и семантике точки проверки см.
перечислены на щупы(3stap) страница руководства.

Обработчик зонда интерпретируется относительно контекста каждого события. Для мероприятий
связанный с кодом ядра, этот контекст может включать переменные определены в источник код
в том месте. Эти «переменные контекста» представляются сценарию как переменные, чьи
имена начинаются с префикса "$". Доступ к ним возможен только при сохранении компилятора ядра.
их, несмотря на оптимизацию. Это то же самое ограничение, с которым сталкивается пользователь отладчика, когда
работа с оптимизированным кодом. Кроме того, объекты должны существовать в выгружаемой памяти в
момент выполнения обработчика зонда systemtap, потому что systemtap не должен вызывать
(подавляет) любую дополнительную подкачку. У некоторых типов зондов очень мало контекста. Увидеть
щупы(3stap) справочные страницы, чтобы увидеть типы контекстных переменных, доступные для каждого типа
точки зондирования.

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

Новые точки тестирования могут быть определены с помощью «псевдонимов». Псевдонимы точек измерения похожи на
определения зонда, но вместо того, чтобы активировать зонд в данной точке, он просто определяет
имя новой точки зондирования как псевдоним существующей. Есть два типа псевдонимов, т.е.
стиль пролога и стиль эпилога, которые обозначаются "=" и "+ ="
соответственно.

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

probe syscall.read = kernel.function ("sys_read") {
fildes = $ fd
if (execname () == "init") next # пропустить оставшуюся часть проверки
}

определяет новую точку измерения системный вызов.read, который расширяется до kernel.function ("sys_read")шестидесяти процентов
данное утверждение в качестве пролога, которое полезно для предопределения некоторых переменных для
псевдоним пользователя и / или полностью пропустить обработку зонда в зависимости от некоторых условий. И

probe syscall.read + = kernel.function ("sys_read") {
если (tracethis) println ($ fd)
}

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

Псевдоним используется так же, как и тип встроенного зонда.

зонд syscall.read {
printf ("чтение fd =% d \ n", fildes)
если (fildes> 10) tracethis = 1
}

ФУНКЦИИ
Сценарии Systemtap могут определять подпрограммы для исключения общей работы. Функции принимают любые
количество скалярных (целых или строковых) аргументов и должен возвращать один скаляр (целое число
или строка). Пример объявления функции выглядит так:

функция thisfn (arg1, arg2) {
вернуть arg1 + arg2
}

Обратите внимание на общее отсутствие объявлений типов, которые вместо этого выводятся
переводчик. Однако при желании определение функции может включать явный тип
объявления для его возвращаемого значения и / или его аргументов. Это особенно полезно для
встроенные функции C. В следующем примере механизму вывода типа нужно только вывести
type тип arg2 (строка).

функция thatfn: string (arg1: long, arg2) {
возвратный спринт (arg1). arg2
}

Функции могут вызывать других или самих себя рекурсивно до фиксированного предела вложенности. Этот
limit определяется макросом в транслированном коде C и находится в районе 10.

ПЕЧАТЬ
Есть набор имен функций, которые специально обрабатываются переводчиком. Они
форматировать значения для печати в стандартный поток вывода systemtap в более удобном
способ. В спринт * варианты возвращают отформатированную строку вместо ее печати.

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

Println, спринт
Вывести значения вроде Распечатать и спринт, но также добавить новую строку.

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

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

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

Команда Printf директивы форматирования аналогичны директивам C, за исключением того, что они полностью типизированы.
проверил переводчик:

% b Записывает двоичный blob заданного значения вместо текста ASCII. Ширина
спецификатор определяет количество байтов для записи; допустимые спецификаторы% b
% 1b% 2b% 4b% 8b. По умолчанию (% b) составляет 8 байтов.

% c Персонаж.

% d,% i Десятичное число со знаком.

% m Безопасно читает память ядра по заданному адресу, выводит ее содержимое. В
необязательный спецификатор точности (не ширина поля) определяет количество
байт для чтения - по умолчанию 1 байт. % 10.4m печатает 4 байта памяти в
Поле шириной 10 символов.

% M То же, что и% m, но выводится в шестнадцатеричном формате. Минимальный размер вывода составляет
удвойте необязательный спецификатор точности - по умолчанию 1 байт (2 шестнадцатеричных символа).
% 10.4M печатает 4 байта памяти как 8 шестнадцатеричных символов в
Поле шириной 10 символов.

% o Восьмеричное беззнаковое число.

% p Адрес беззнакового указателя.

% s Строка.

% u Десятичное число без знака.

% x Беззнаковое шестнадцатеричное значение в нижнем регистре.

% X Беззнаковое шестнадцатеричное значение, все в верхнем регистре.

%% Записывает%.

Команда # flag выбирает альтернативные формы. Для восьмеричных это префикс 0. Для шестнадцатеричных это
префиксы 0x или 0X, в зависимости от случая. Для символов это позволяет избежать непечатаемых значений.
либо с C-подобными escape-символами, либо с необработанными восьмеричными числами.

Примеры:

a = "alice", b = "bob", p = 0x1234abcd, i = 123, j = -1, id [a] = 1234, id [b] = 4567
print ("привет")
Печать: привет
println (b)
Печать: боб \ n
println (a. "есть". спринт(16))
Печать: Алисе 16
foreach (имя в идентификаторе) printdln ("|", strlen (имя), имя, идентификатор [имя])
Отпечатки: 5 | alice | 1234 \ n3 | bob | 4567
printf ("% c это% s;% x или% X или% p;% d или% u \ n", 97, a, p, p, p, j, j)
Печатает: а - алиса; 1234abcd или 1234ABCD или 0x1234abcd; -1 или 18446744073709551615 \ n
printf ("2 байта буфера ядра по адресу% p:% 2m", p, p)
Выводит: 2 байта буфера ядра по адресу 0x1234abcd:
printf ("% 4b", p)
Выводит (эти значения в виде двоичных данных): 0x1234abcd
printf ("% # o% # x% # X \ n", 1, 2, 3)
Печать: 01 0x2 0X3
printf ("% # c% # c% # c \ n", 0, 9, 42)
Печать: \ 000 \ t *

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

Оператор агрегации <<, и напоминает назначение или поток вывода C ++
операция. Левый операнд задает l-значение скаляра или индекса массива, которое должно быть
объявлен глобальным. Правый операнд - это числовое выражение. Смысл интуитивно понятен:
добавить данное число в кучу чисел для вычисления статистики. (Конкретный список
статистики для сбора предоставляется отдельно функциями извлечения.)

foo <<< 1
статистика [pid ()] <<< memsize

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

Вот набор функций экстрактора. Первый аргумент каждого - один и тот же стиль
lvalue, используемое в левой части операции накопления. В @count (v), @sum (v),
@min (v), @max (v), @avg (v) функции экстрактора вычисляют
количество / общее / минимальное / максимальное / среднее всех накопленных значений. Результирующие значения:
все простые целые числа. Массивы, содержащие агрегаты, можно сортировать и повторять. Увидеть
Еогеасп построить выше.

Гистограммы также доступны, но они более сложные, потому что они имеют вектор, а не
чем скалярное значение. @hist_linear (v, начало, остановка, интервал) представляет собой линейную гистограмму из
от «старт» до «стоп» с шагом «интервал». Интервал должен быть положительным. Так же,
@hist_log (v) представляет собой логарифмическую гистограмму с основанием 2. Печать гистограммы с
Распечатать Семейство функций отображает объект гистограммы в виде табличной гистограммы «ASCII art».

зонд timer.profile {
x [1] <<< pid ()
x [2] <<< uid ()
y <<< tid ()
}
global x // массив, содержащий агрегаты
глобальный y // скаляр
конец зонда {
foreach ([i] in x @ count +) {
printf ("x [% d]: avg% d = sum% d / count% d \ n",
i, @avg (x [i]), @sum (x [i]), @count (x [i]))
println (@hist_log (x [i]))
}
println ("у:")
println (@hist_log (y))
}

ПРОГНОЗ
После указателя (см. Раздел КОНТЕКСТНЫЕ ПЕРЕМЕННЫЕ в щупы(3stap)) сохранен
в целочисленную переменную скрипта, переводчик теряет информацию о типе, необходимую для
доступ к членам из этого указателя. С помощью @В ролях() оператор сообщает переводчику, как
интерпретировать число как напечатанный указатель.

@cast (p, "type_name" [, "module"]) -> член

Это будет интерпретировать p как указатель на структуру / объединение с именем имя_типа и разыменовать
член ценность. Дальше -> подполе выражения могут быть добавлены для разыменования нескольких уровней.
ПРИМЕЧАНИЕ: тот же оператор разыменования -> используется для обозначения как прямого сдерживания, так и
указатель косвенного обращения. Systemtap автоматически определяет, какие. Необязательный модуль говорит
переводчик, где искать информацию об этом типе. Несколько модулей могут быть
указан в виде списка с : разделители. Если модуль не указан, он будет по умолчанию
либо в модуль зонда для карликовых зондов, либо в «ядро» для функций и всех других
типы зондов.

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

@cast (tv, "timeval", " ") -> tv_sec
@cast (задача, "структура_задачи", "ядро ") -> tgid
@cast (задача, "task_struct",
"ядро ") -> fs-> umask

Ценности приобретены @В ролях может быть красиво напечатан $ и $$ суффиксные операторы, то же
способом, как описано в разделе КОНТЕКСТНЫЕ ПЕРЕМЕННЫЕ щупы(3stap) страница руководства.

В режиме гуру переводчик также позволяет скриптам присваивать новые значения участникам.
типизированных указателей.

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

зонд фу {
if ($ var-> type == 1) {
значение = @cast ($ var-> data, "type1") -> bar
} Еще {
значение = @cast ($ var-> data, "type2") -> baz
}
печать (значение)
}

EMBEDDED C
В режиме гуру переводчик принимает встроенный код на верхнем уровне скрипта.
Такой код заключен между %{ и %} маркеры, и записывается дословно, без
анализ в некоторой последовательности на верхний уровень сгенерированного кода C. На крайнем
уровень, может быть полезно добавить #включают инструкции и любые вспомогательные определения для
использование другим встроенным кодом.

Еще одно место, где разрешен встроенный код, - это тело функции. В этом случае
тело языка сценария полностью заменяется фрагментом кода C, снова заключенным между %{
и %} маркеры. Этот код C может делать все разумное и безопасное. Есть ряд
недокументированные, но сложные ограничения безопасности на атомарность, параллелизм, ресурсы
потребление и ограничения по времени работы, так что это продвинутый метод.

Ячейки памяти, отведенные для входных и выходных значений, становятся доступными для него с помощью
Макрос STAP_ARG_ * и STAP_RETVVALUE. Об ошибках можно сигнализировать с помощью STAP_ERROR. Выход может
быть записанным с помощью STAP_PRINTF. Функция может вернуться раньше с STAP_RETURN. Здесь
несколько примеров:

function integer_ops (val)% {
STAP_PRINTF ("% d \ n", STAP_ARG_val);
STAP_RETVVALUE = STAP_ARG_val + 1;
если (STAP_RETVALUE == 4)
STAP_ERROR ("неверное предположение:% d", (int) STAP_RETVALUE);
если (STAP_RETVALUE == 3)
STAP_RETURN(0);
STAP_RETVVALUE++;
%}
function string_ops (val)% {
strlcpy (STAP_RETVVALUE, STAP_ARG_val, MAXSTRINGLEN);
strlcat (STAP_RETVALUE, «один», MAXSTRINGLEN);
если (strcmp (STAP_RETVALUE, "три-два-один"))
STAP_RETURN («параметр должен быть три-два-»);
%}
function no_ops ()% {
STAP_RETURN (); / * функция выведена без возвращаемого значения * /
%}

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

Последнее место, где разрешен встроенный код, - это выражение rvalue. В таком случае,
код C, заключенный между %{ и %} маркеры интерпретируются как обычное выражение
ценность. Предполагается, что это обычное 64-битное число со знаком, если только маркер /* string */
включен, и в этом случае он обрабатывается как строка.

функция add_one (val) {
вернуть значение +% {1%}
}
функция add_string_two (val) {
вернуть val. % {/ * строка * / "два"%}
}

Код встроенного C может содержать маркеры для подтверждения свойств оптимизации и безопасности.

/* чистый */
означает, что код C не имеет побочных эффектов и может быть полностью исключен, если его значение
не используется кодом сценария.

/* стабильный */
означает, что код C всегда имеет одно и то же значение (в любом заданном обработчике зонда
вызов), поэтому повторные вызовы могут быть автоматически заменены мемоизированными значениями.
Такие функции не должны иметь параметров, а также быть чистый.

/* непривилегированный */
означает, что код C настолько безопасен, что даже непривилегированным пользователям разрешено использовать
его.

/* myproc-непривилегированный */
означает, что код C настолько безопасен, что даже непривилегированным пользователям разрешено использовать
при условии, что цель текущего зонда находится в собственном процессе пользователя.

/* гуру */
означает, что код C настолько небезопасен, что пользователь systemtap должен указать -g (гуру
mode), чтобы использовать это.

/* распутанный */
во встроенной функции C означает, что унаследованный (до 1.8) синтаксис доступа аргументов
должен быть доступен внутри функции. Следовательно, помимо STAP_ARG_foo
и STAP_RETVVALUE можно использовать ЭТО-> foo и ЭТО->__возродить соответственно внутри
функция. Это полезно для быстрой миграции кода, написанного для SystemTap.
версия 1.7 и более ранние.

/* немодифицированный-fnargs */
во встроенной функции C означает, что аргументы функции не изменяются
внутри тела функции.

/* string */
только во встроенных выражениях C означает, что выражение имеет Const колесница * тип и
следует рассматривать как строковое значение, а не как длинное числовое значение по умолчанию.

ВСТРОЕННЫЕ
Набор встроенных псевдонимов точек зондирования предоставляется скриптами, установленными в
каталог, указанный в стаппаты(7) страница руководства. Функции описаны в
щупы(3stap) страница руководства.

ОБРАБОТКА


Переводчик начинает этап 1 с анализа заданного входного сценария, и все сценарии (файлы
названный * .stp) найден в каталоге Tapset. Каталоги, перечисленные с -I обрабатываются в
последовательность, каждая из которых обрабатывается в «режиме гуру». Для каждого каталога есть несколько подкаталогов.
также ищутся. Эти подкаталоги являются производными от выбранной версии ядра (
-R option), чтобы позволить большему количеству скриптов, зависящих от версии ядра, переопределять меньше
конкретные. Например, для версии ядра 2.6.12-23.FC3 следующие шаблоны
будет производиться поиск в следующей последовательности: 2.6.12-23.FC3 / *. Stp, 2.6.12 / *. Stp, 2.6 / *. Stp, и наконец
* .stp. Остановка транслятора после прохода 1 заставляет его печатать деревья синтаксического анализа.

На шаге 2 переводчик анализирует входной сценарий для определения символов и типов.
Ссылки на переменные, функции и псевдонимы зондов, которые не разрешены внутри, являются
удовлетворены поиском в проанализированных файлах сценария Tapset. Если какой-либо файл сценария тапсета
выбран, потому что он определяет неразрешенный символ, то весь этот файл
добавлен в очередь на разрешение переводчика. Этот процесс повторяется до тех пор, пока все символы не будут
разрешено, и выбрано подмножество файлов сценариев Tapset.

Затем все описания точек измерения проверяются на соответствие широкому разнообразию, поддерживаемому
переводчик. Точки измерения, относящиеся к участкам кода («синхронные точки измерения»)
требуется установка соответствующей отладочной информации ядра. В ассоциированном
обработчики зондов, переменные на стороне цели (имена которых начинаются с "$") найдены и имеют
декодированы их текущие местоположения.

Затем все датчики и функции анализируются на предмет возможностей оптимизации, чтобы
удалите переменные, выражения и функции, которые не имеют полезного значения и не имеют побочных эффектов.
Предполагается, что функции Embedded-C имеют побочные эффекты, если они не включают волшебную строку
/* чистый */. Поскольку эта оптимизация может скрыть скрытые ошибки кода, такие как несоответствие типов
или недопустимые переменные $ context, иногда может быть полезно отключить оптимизацию
с -u опцию.

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

На третьем этапе транслятор пишет код C, который представляет действия всех выбранных скриптов.
файлы и создает Makefile чтобы встроить это в объект ядра. Эти файлы помещаются
во временный каталог. Остановка переводчика на этом этапе приводит к тому, что он печатает
содержимое файла C.

На этапе 4 транслятор вызывает систему сборки ядра Linux для создания фактического
файл объекта ядра. Это включает в себя бег сделать во временном каталоге и требует
система сборки модуля ядра (заголовки, конфигурация и Makefiles) для установки в обычном
место / lib / модули / ВЕРСИЯ / сборка. Остановка переводчика после четвертого прохода - последний шанс
перед запуском объекта ядра. Это может быть полезно, если вы хотите заархивировать файл.

На шаге 5 транслятор вызывает вспомогательную программу systemtap. Staprun Программа для
данный объект ядра. Эта программа загружает модуль, а затем связывается с ним,
копирование данных трассировки из ядра во временные файлы, пока пользователь не отправит прерывание
сигнал. Любая ошибка времени выполнения, обнаруженная обработчиками зонда, например, нехватка
память, деление на ноль, превышение пределов вложенности или времени выполнения приводит к мягкой ошибке
индикация. Мягкие ошибки сверх блока MAXERRORS всех последующих проб (кроме
зонды обработки ошибок) и завершить сеанс. Ну наконец то, Staprun выгружает модуль,
и убирает.

АНОМАЛЬНЫЙ ПРЕКРАЩЕНИЕ
Следует избегать принудительного завершения процесса stap, например, с помощью SIGKILL, потому что
процесс stapio (дочерний процесс процесса stap) и загруженный модуль можно оставить
работает в системе. Если это произойдет, отправьте SIGTERM или SIGINT на любой оставшийся стапио.
процессы, затем используйте rmmod, чтобы выгрузить модуль systemtap.

ПРИМЕРЫ


Смотрите пост в стапекс(3stap) страница руководства для краткой коллекции образцов или большого набора
образцы устанавливаются в каталогах systemtap documentation / testsuite. Видеть
стаппаты(7stap) для их вероятного расположения в системе.

Кеширование


Транслятор systemtap кэширует выходные данные этапа 3 (сгенерированный код C) и этап 4.
output (скомпилированный модуль ядра), если этап 4 завершается успешно. Этот кешированный вывод
повторно используется, если тот же сценарий переводится снова, предполагая, что существуют те же условия (такие же
версия ядра, та же версия systemtap и т. д.). Кешированные файлы хранятся в
$ SYSTEMTAP_DIR / кеш каталог. Кеш можно ограничить, если файл кэш_мб_лимит
помещается в каталог кеша (показанный выше), содержащий только целое число ASCII, представляющее
сколько MiB не должен превышать кеш. В отсутствие этого файла по умолчанию будет
создан с ограничением 256 МБ. Это «мягкий» предел, так как кеш будет
очищается после добавления новой записи, если интервал очистки кеша превышен, поэтому общий
размер кеша может временно превышать этот предел. Этот интервал можно указать, если
файл кэш_чистый_интервал_с помещенный в каталог кеша (показанный выше), содержащий только
Целое число ASCII, представляющее интервал в секундах. В отсутствие этого файла по умолчанию
будет создан с интервалом 300 с.

БЕЗОПАСНОСТЬ И БЕЗОПАСНОСТЬ


Systemtap может использоваться как мощный инструмент администрирования. Он может раскрыть внутреннее ядро
структуры данных и потенциально конфиденциальная информация о пользователях. (В дининст режим выполнения, это
это не так, см. АЛЬТЕРНАТИВНЫЙ РАСХОДЫ раздел ниже.)

Транслятор устанавливает множество ограничений безопасности во время компиляции и многое другое во время выполнения.
время. Он направлен на то, чтобы ни одна процедура обработчика не могла работать очень долго, выделять безграничные
памяти, выполнять небезопасные операции или непреднамеренно вмешиваться в работу системы. Использует
глобальных переменных скрипта автоматически блокируются для чтения / записи, чтобы защитить
от манипуляций со стороны одновременных обработчиков зондов. (Тупиковые ситуации обнаруживаются с помощью таймаутов.
Использовать -t чтобы получать сообщения о чрезмерном количестве конфликтов блокировки.)
скрипты поэтому обычно безопасный. Гуру-режим -g опция позволяет администраторам
обходить большинство мер безопасности, что позволяет проводить инвазивные операции или операции, изменяющие состояние,
встроенный код C и увеличивает риск расстройства. По умолчанию предотвращение перегрузки
включен для всех модулей. Если вы хотите отключить обработку перегрузки, используйте
-suppress-time-limits опцию.

Ошибки, обнаруженные во время выполнения, обычно приводят к чистому завершению работы скрипта и проходу 5
сообщение об ошибке. В --suppress-обработчик-ошибок опция позволяет скриптам допускать мягкие ошибки
без выключения.

РАЗРЕШЕНИЯ
Для нормальной среды выполнения linux-kernel-module, чтобы запускать сборки systemtap объектов ядра,
пользователь должен быть одним из следующих:

· Пользователь root;

· Член стапдев и стапуср группы;

· Член Stapsys и стапуср группы; или

· Член стапуср группа.

Пользователь root или пользователь, который является членом обоих стапдев и стапуср группы могут строить
и запустите любой сценарий systemtap.

Пользователь, который является участником как Stapsys и стапуср группы могут использовать только предварительно созданные
модули при следующих условиях:

· Модуль подписан доверенным лицом. Надежные подписанты обычно используют systemtap.
серверы компиляции, которые подписывают модули, когда - привилегия опция указывается
клиент. Увидеть stap-сервер(8) страница руководства для получения дополнительной информации.

· Модуль построен с использованием --privilege = stapsys или --privilege = stapusr настройки.

Члены только стапуср группа может использовать только предварительно созданные модули в следующих
Условия:

· Модуль находится в каталоге / lib / modules / VERSION / systemtap. Этот каталог
должен принадлежать root и не быть доступным для записи всем.

or

· Модуль подписан доверенным лицом. Надежные подписанты обычно используют systemtap.
серверы компиляции, которые подписывают модули, когда - привилегия опция указывается
клиент. Увидеть stap-сервер(8) страница руководства для получения дополнительной информации.

· Модуль был построен с использованием опции --privilege = stapusr.

Модули ядра, сгенерированные НТКГ программа выполняется Staprun программа. Последний
является частью пакета Systemtap, предназначенного для загрузки и выгрузки модулей (но только в
белая зона) и передача данных от ядра к пользователю. С Staprun не выполняет никаких
дополнительные проверки безопасности на объектах ядра, это было бы неразумно для
системный администратор, чтобы добавить ненадежных пользователей в стапдев or стапуср группы.

БЕЗОПАСНАЯ ЗАГРУЗКА
Если в текущей системе включен SecureBoot в прошивке UEFI, все модули ядра
должен быть подписан. (Некоторые ядра могут позволять отключать SecureBoot спустя долгое время после загрузки с
последовательность клавиш, такая как SysRq-X, что избавляет от необходимости подписывать модули.)
сервер компиляции может подписывать модули с помощью MOK (ключа владельца машины), который у него общий с
клиентская система. См. Дополнительную информацию на следующей вики-странице:

https://sourceware.org/systemtap/wiki/SecureBoot

РЕСУРС ПРЕДЕЛЫ
Многие ограничения на использование ресурсов устанавливаются макросами в сгенерированном коде C. Это могут быть
переопределено с -D флаги. Вот некоторые из них:

МАКСНЕСТИНГ
Максимальное количество вызовов вложенных функций. По умолчанию определяется анализом сценария,
с бонусом 10 добавленных слотов для рекурсивных скриптов.

МАКССТРИНГЛЕН
Максимальная длина строк, по умолчанию 128.

МАКСРИЛОК
Максимальное количество итераций для ожидания блокировок глобальных переменных перед объявлением
возможный тупик и пропуск проверки, по умолчанию 1000.

МАКСАКЦИЯ
Максимальное количество операторов, выполняемых во время одного пробного попадания (с
прерывания отключены), по умолчанию 1000. Обратите внимание, что для обработчиков сквозных пробников
отсутствие циклов или рекурсии, из-за оптимизации этот параметр может быть интерпретирован
слишком консервативно.

MAXACTION_INTERRUPTIBLE
Максимальное количество операторов для выполнения во время одного пробного попадания, которое
выполняется с включенными прерываниями (такими как начало / конец проверки), по умолчанию (MAXACTION *
10).

МАКСБАКТРЕЙС
Максимальное количество кадров стека, которое будет обработано средой выполнения stap
разматыватель, созданный функциями обратной трассировки в [u] context-unwind.stp
тапсеты, по умолчанию 20.

МАКСМАПЕНТРИ
Максимальное количество строк по умолчанию в одном глобальном массиве, по умолчанию 2048.
Вместо этого можно объявлять отдельные массивы с большим или меньшим пределом:

глобальный большой [10000], маленький [5]

или обозначается % чтобы они автоматически оборачивались.

МАКСЕРРОС
Максимальное количество программных ошибок перед срабатыванием выхода, по умолчанию 0, что означает
что первая ошибка приведет к выходу из скрипта. Обратите внимание, что с
--suppress-обработчик-ошибок вариант, этот предел не применяется.

МАКСИМПЕД
Максимальное количество пропущенных зондов перед срабатыванием выхода, по умолчанию 100. Выполняется
systemtap с режимом -t (тайминги) дает более подробную информацию о пропущенных пробах. С
по умолчанию -DINTERRUPTIBLE = 1, пробы, пропущенные из-за повторного входа, не
накоплено до этого лимита. Обратите внимание, что с --suppress-обработчик-ошибок
вариант, этот предел не применяется.

МИНСТЭКСПЕЙС
Минимальное количество свободных байтов стека ядра, необходимое для запуска обработчика зонда,
по умолчанию 1024. Это число должно быть достаточно большим для собственного обработчика зонда.
потребности, плюс запас прочности.

МАКСУПРОБЫ
Максимальное количество одновременно включенных зондов пользовательского пространства (uprobes), по умолчанию несколько
больше, чем количество точек проверки в пользовательском пространстве, указанное в сценарии. Этот бассейн
должен быть потенциально большим, потому что отдельные объекты апробирования (около 64 байтов
each) выделяются для каждого процесса для каждой соответствующей проверки уровня сценария.

STP_MAXMEMORY
Максимальный объем памяти (в килобайтах), который должен использовать модуль systemtap,
по умолчанию без ограничений. В объем памяти входит размер самого модуля, плюс
любые дополнительные отчисления. Это отслеживает только прямые выделения по системному тегу
время выполнения. При этом не отслеживаются косвенные распределения (как это делают kprobes / uprobes / и т. Д.).
внутренности).

STP_OVEROAD_THRESHOLD, STP_OVERLOAD_INTERVAL
Максимальное количество машинных циклов, проводимых в пробах на любом ЦП за заданный интервал,
до объявления состояния перегрузки и завершения работы сценария. По умолчанию
500 миллионов и 1 миллиард, чтобы ограничить потребление ЦП stap script примерно на уровне
50%.

STP_PROCFS_BUFSIZE
Размер буферов чтения зонда procfs (в байтах). По умолчанию МАКССТРИНГЛЕН. Это
значение может быть переопределено для каждого файла в отдельности с помощью пробы чтения procfs
.maxsize (MAXSIZE) Параметр.

Со сценариями, содержащими зонды на любом пути прерывания, возможно, что эти
прерывания могут возникать в середине другого обработчика зонда. Зонд в прерывании
обработчик будет пропущен в этом случае, чтобы избежать повторного входа. Чтобы обойти эту проблему,
выполнить stap с опцией -DINTERRUPTIBLE = 0 для маскировки прерываний по всему пробнику
обработчик. Это добавляет дополнительные накладные расходы на зонды, но может предотвратить повторный вход.
для общих проблемных случаев. Тем не менее, зонды в обработчиках NMI и в пути вызова stap
время выполнения все еще может быть пропущено из-за повторного входа.

Несколько сценариев могут одновременно записывать данные в буфер реле. Сценарий хоста предоставляет
интерфейс для доступа к его буферу ретрансляции гостевым скриптам. Затем вывод
гости объединяются в вывод хоста. Чтобы запустить скрипт в качестве хоста, выполните stap
-DRELAYHOST [= имя] вариант. имя идентифицирует ваш хост-скрипт среди нескольких хостов.
Во время работы хоста выполните stap с -DRELAYGUEST [= имя] добавить гостевой скрипт в
хозяин. Обратите внимание, что вы должны выгружать гостей перед разгрузкой хоста. Если есть гости
подключен к хосту, выгрузить хост не удастся.

Если что-то пойдет не так с НТКГ or Staprun после того, как зонд уже начался
запущен, можно безопасно убить оба пользовательских процесса и удалить активное ядро ​​зонда.
модуль с РМмод. Любые ожидающие сообщения трассировки могут быть потеряны.

БЕЗПРИВИЛЕГИРОВАННЫЙ пОЛЬЗОВАТЕЛЕЙ


Systemtap предоставляет внутренние структуры данных ядра и потенциально частного пользователя
Информация. Из-за этого использование всех возможностей systemtap ограничено root
и пользователям, которые являются членами групп stapdev и stapusr.

Однако ограниченный набор функций systemtap может быть доступен доверенным,
непривилегированные пользователи. Эти пользователи являются членами только группы stapusr или членами группы
группы stapusr и stapsys. Эти пользователи могут загружать модули systemtap, которые были
скомпилировано и сертифицировано доверенным сервером компиляции systemtap. См. Описания
кредита - привилегия и --use-сервер. Посмотреть README.непривилегированный в исходном коде systemtap
для получения информации о настройке доверенного сервера компиляции.

Ограничения применяются, когда --privilege = stapsys указаны, предназначены для предотвращения
непривилегированные пользователи из:

· Злонамеренное повреждение системы.

Ограничения применяются, когда --privilege = stapusr указаны, предназначены для предотвращения
непривилегированные пользователи из:

· Злонамеренное повреждение системы.

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

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

PROBE ОГРАНИЧЕНИЯ
Член групп stapusr и stapsys может использовать все точки зондирования.

Член только группы stapusr может использовать только следующие зонды:

· Begin, begin (n)

· Конец, конец (n)

· Ошибка (n)

· никогда

· Process. *, Где целевой процесс принадлежит пользователю.

· Timer. {Jiffies, s, sec, ms, msec, us, usec, ns, nsec} (n) *

· Timer.hz ​​(n)

SCRIPT АНГЛИЙСКИЙ ЯЗЫК ОГРАНИЧЕНИЯ
Следующие функции языка сценариев недоступны для всех непривилегированных пользователей:

· Любая функция, включенная параметром Guru Mode (-g).

· Встроенный код C.

проверка ОГРАНИЧЕНИЯ
На всех непривилегированных пользователей накладываются следующие ограничения времени выполнения:

· Только код времени выполнения по умолчанию (см. -R) может быть использовано.

Дополнительные ограничения накладываются только на участников группы stapusr:

· Проверка процессов, принадлежащих другим пользователям, не допускается.

· Доступ к памяти ядра (чтение и запись) не разрешен.

КОМАНДА ЛИНИЯ ВАРИАНТ ОГРАНИЧЕНИЯ
Некоторые параметры командной строки предоставляют доступ к функциям, которые не должны быть доступны всем.
непривилегированные пользователи:

· -G нельзя указывать.

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

-а, -б, -д, -и, -р, -р

ОКРУЖАЮЩАЯ СРЕДА ОГРАНИЧЕНИЯ
Следующие переменные среды нельзя устанавливать для всех непривилегированных пользователей:

СИСТЕМАTAP_RUNTIME
СИСТЕМАТАП_ТАПСЕТ
SYSTEMTAP_DEBUGINFO_PATH

НАПРАВЛЯЮЩИЙ ОГРАНИЧЕНИЯ
Как правило, функции Tapset доступны только для членов группы stapusr, когда они
не собирать информацию о том, что обычная программа, работающая с привилегиями этого пользователя
будет отказано в доступе к.

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

cpu: long ()
выход ()
str_replace: строка (prnt_str: строка, srch_str: строка, rplc_str: строка)

Вторая категория состоит из так называемых myproc-непривилегированный функции, которые могут только
собирать информацию в рамках своих собственных процессов. Скрипты, которые хотят использовать эти функции
должен проверить результат функции Tapset is_myproc и вызывать эти функции только в том случае, если
результат 1. Сценарий немедленно завершит работу, если какая-либо из этих функций вызывается
непривилегированный пользователь в рамках зонда в процессе, который не принадлежит этому пользователю.
Примеры myproc-непривилегированный функции включают:

print_usyms (stk: строка)
user_int: длинный (адрес: длинный)
usymname: строка (адрес: длинный)

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

Никакие другие встроенные функции Tapset не могут использоваться членами только группы stapusr.

АЛЬТЕРНАТИВНЫЙ РАСХОДЫ


Как описано выше, режим выполнения systemtap по умолчанию включает сборку и загрузку ядра.
модули, с различными представленными компромиссами безопасности. Systemtap теперь включает новый
прототип серверной части, выбранный с помощью --runtime = dyninst, который использует Dyninst для инструмента
собственные процессы пользователя во время выполнения. Этот бэкэнд не использует модули ядра и не
требуются привилегии root, но ограничены в отношении типов зондов и других
конструкции, которые может использовать сценарий.

Команда дининст среда выполнения работает в режиме целевого подключения, поэтому для нее требуется -c КОМАНДА or -x
PID процесс. Например:

stap --runtime = dyninst -c 'stap -V' \
-e 'зондировать process.function ("main")
{println ("привет от dyninst!")} '

Может потребоваться отключить конфликтующую проверку selinux с помощью

# setseboolallow_execstack 1

ВЫХОД статус


Переводчик systemtap обычно возвращает код успеха 0, если запрошенный
сценарий был обработан и успешно выполнен на запрошенном проходе. В противном случае,
ошибки могут быть напечатаны в stderr, и будет возвращен код ошибки. Использовать -v or -вп N в
увеличьте (глобально или за проход) уровень детализации, чтобы определить источник проблемы.

В режиме объявлений (-l и -L) сообщения об ошибках обычно подавляются. Код успеха 0
возвращается, если был найден хотя бы один подходящий зонд.

Сценарий, выполняющийся на проходе 5, который прерывается с помощью ^ C / SIGINT, считается
успешный.

УДАЛЕНИЕ


Со временем некоторые особенности языка сценариев и библиотеки Tapset могут подвергнуться
несовместимые изменения, поэтому сценарий, написанный для старой версии systemtap, может не
более длинный пробег. В этих случаях может помочь запустить systemtap с --совместимый Версия
флаг, указывающий последнюю известную рабочую версию. Запуск systemtap с
--check-версия flag выдаст предупреждение, если какие-либо несовместимые элементы были
разобраны. Исторические сведения об устаревании можно найти в файле NEWS.

Используйте stap онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    KDiff3
    KDiff3
    Этот репозиторий больше не поддерживается
    и хранится в архивных целях. Видеть
    https://invent.kde.org/sdk/kdiff3 for
    новейший код и
    https://download.kde.o...
    Скачать KDiff3
  • 2
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX — это графический интерфейс для
    USB-загрузчик Ванинкоко, основанный на
    libwiigui. Он позволяет перечислять и
    запуск игр Wii, игр Gamecube и
    доморощенный на Wii и WiiU...
    Скачать USBLoaderGX
  • 3
    Жар-птица
    Жар-птица
    СУБД Firebird предлагает функции ANSI SQL
    & работает на Linux, Windows и
    несколько Unix-платформ. Функции
    отличный параллелизм и производительность
    & сила...
    Скачать Firebird
  • 4
    KompoZer
    KompoZer
    KompoZer — это wysiwyg HTML-редактор, использующий
    кодовая база Mozilla Composer. В виде
    Разработка Нву остановлена
    в 2005 году KompoZer исправляет множество ошибок и
    добавляет ф...
    Скачать Композер
  • 5
    Бесплатная загрузка манги
    Бесплатная загрузка манги
    Free Manga Downloader (FMD) — это
    приложение с открытым исходным кодом, написанное на
    Object-Pascal для управления и
    скачивание манги с разных сайтов.
    Это зеркало...
    Скачать бесплатный загрузчик манги
  • 6
    UNetbootin
    UNetbootin
    UNetbootin позволяет создавать загрузочные
    Живые USB-накопители для Ubuntu, Fedora и
    другие дистрибутивы Linux без
    запись компакт-диска. Работает на Windows, Linux,
    и ...
    Скачать UNetbootin
  • Больше »

Команды Linux

Ad