Библиотека сайта rus-linux.net
Руководство для начинающих пользователей SystemTap. Обзор сообщений об ошибках SystemTap
Оригинал: SystemTap Beginners GuideАвторы: Don Domingo, William Cohen
Дата публикации: 20 июля 2009 г.
Перевод: А.Панин
Дата перевода: 5 октября 2014 г.
Глава 6. Обзор сообщений об ошибках SystemTap
В данной главе описываются наиболее часто встречающиеся сообщения об ошибках, с которыми вы можете столкнуться при эксплуатации SystemTap.
6.1. Семантические ошибки и ошибки разбора сценариев
Семантические ошибки и ошибки разбора сценариев возникают тогда, когда SystemTap пытается разобрать сценарий и преобразовать его в код на языке C перед преобразованием этого кода в модуль ядра ОС. Например, ошибки типизации возникают при разборе операций, в рамках которых некорректные значения присваиваются переменным и массивам.
parse error: expected foo, saw bar
Сценарий содержит грамматическую ошибку или опечатку. SystemTap удалось определить, что тип конструкции является некорректным при рассмотрении его в контексте зонда.
probe vfs.read probe vfs.write
probe
в столбце 1 строки 2:
parse error: expected one of '. , ( ? ! { = +=' saw: keyword at perror.stp:2:1 1 parse error(s).
parse error: embedded code in unprivileged script
Сценарий содержит небезопасную вставку из кода на языке C, представленную в форме блока кода, ограниченного с помощью последовательностей символов %{
и %}
. SystemTap позволяет создавать вставки кода на языке C в рамках сценария, что полезно в том случае, если не существует тапсетов, удовлетворяющих вашим требованиям. Однако, вставки с конструкциями на языке C не являются безопасными, поэтому SystemTap сообщает о данной ошибке для того, чтобы предупредить вас о наличии подобных конструкций в сценарии.
stapdev
(или обладаете привилегиями пользователя root), вы должны запустить данный сценарий в режиме "эксперта", использовав параметр -g
:
stap -g сценарий
semantic error: type mismatch for identifier 'foo' ... string vs. long
%s
или %d
). В следующем примере вместо спецификатора форматирования %d
должен использоваться спецификатор форматирования %s
, так как функция execname()
возвращает строку:
probe syscall.open { printf ("процесс %d(%d) был запущен\n", execname(), pid()) }
semantic error: unresolved type for identifier 'foo'
Идентификатор (переменная) был использован, но его тип (целочисленный или строковый) не может быть определен. Это происходит, например, в том случае, если вы используете переменную совместно с функцией printf
, но при этом в рамках сценария не было осуществлено присваивание значения этой переменной.
semantic error: Expecting symbol or array index expression
probe begin { printf("x") = 1 }
while searching for arity N function, semantic error: unresolved function call
При вызове функции или доступе к элементу массива по индексу в рамках сценария использовано некорректное количество аргументов или параметров. В SystemTap арность (arity) может относиться либо к количеству индексов массива, либо к количеству параметров функции.
semantic error: array locals not supported, missing global declaration?
В рамках сценария осуществляется операция с массивом без декларации массива в качестве глобальной переменной (в сценариях SystemTap глобальные переменные могут декларироваться после их использования). Аналогичные сообщения выводятся при использовании массива с непоследовательными арностями.
semantic error: variable 'foo' modified during 'foreach' iteration
Массив foo был модифицирован (элементу массива было присвоено значение или элемент был удален из массива) в рамках активного цикла foreach
. Эта ошибка также указывает на то, что в рамках итерационного цикла foreach
осуществляется вызов функции.
semantic error: probe point mismatch at position N, while resolving probe point foo
SystemTap не может понять, на какое событие или функцию SystemTap ссылается foo. Обычно это означает, что SystemTap не может найти соответствующий foo тапсет в библиотеке тапсетов. N указывает на строку и столбец, в которых обнаружена ошибка.
semantic error: no match for probe point, while resolving probe point foo
SystemTap не может обработать описание событий или функцию-обработчик foo по различным причинам. Эта ошибка возникает в том случае, если сценарий содержит описание события kernel.function("функция")
, при этом описанной функции не существует. В некоторых случаях ошибка также может означать, что сценарий содержит некорректное имя файла исходного кода ядра ОС или некорректный номер строки файла исходного кода.
semantic error: unresolved target-symbol expression
Обработчик из сценария ссылается на целевую переменную, но значение этой переменной не может быть определено. Эта ошибка также может означать, что обработчик ссылается на целевую переменную, которая не является действительной в том контексте, из которого на нее сослались. Эта ошибка может возникать в результате оптимизаций генерируемого компилятором кода.
semantic error: libdwfl failure
Возникла проблема при обработке отладочной информации. В большинстве случаев эта ошибка возникает в результате установки версии пакета kernel-debuginfo, которая в точности не соответствует исследуемой версии ядра ОС. Установленный пакет kernel-debuginfo сам по себе может иметь некоторые проблемы с согласованностью и корректностью данных.
semantic error: cannot find foo debuginfo
SystemTap не может найти подходящего пакета kernel-debuginfo в системе.
6.2. Ошибки и предупреждения времени исполнения
Ошибки и предупреждения времени исполнения возникают тогда, когда инструментарий SystemTap успешно устанавливается и начинает собирать данные о системе.
WARNING: Number of errors: N, skipped probes: M
В процессе работы сценария SystemTap возникли ошибки и/или были пропущены зонды. Числа N и M соответствуют количеству ошибок и зондов, которые не были задействованы по таким причинам, как чрезмерная длительность промежутка времени, необходимого для исполнения обработчиков зондов с заданной продолжительностью интервала исполнения.
division by 0
В коде сценария была осуществлена некорректная операция деления.
aggregate element not found
Функция для извлечения статистических данных, отличная от функции @count
была использована по отношению к переменной для сбора статистических данных, в рамках которой еще не было накоплено каких-либо значений. Данная ошибка аналогична ошибке деления на 0.
aggregation overflow
Массив, содержащий собранные статистические значения, содержит слишком много отдельных пар ключ-значение на данный момент.
MAXNESTING exceeded
Была предпринята попытка использования слишком большого количества уровней вложения вызовов функций. Стандартное допустимое количество уровней вложения вызовов функций равно 10.
MAXACTION exceeded
Была предпринята попытка выполнения слишком большого количества действий в рамках одного обработчика зонда. Стандартное допустимое количество действий в рамках одного обработчика зонда равно 1000.
kernel/user string copy fault at ADDR
Обработчик зонда попытался скопировать строку из пространства пользователя или пространства ядра с использованием некорректного целевого адреса (ADDR).
pointer dereference fault
Возникла ошибка в процессе выполнения операции, связанной с разыменованием указателя, такой, как оценка значения целевой переменной.
Следующий раздел : Глава 7. Источники дополнительной информации.