Наши партнеры

UnixForum





Библиотека сайта 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 удалось определить, что тип конструкции является некорректным при рассмотрении его в контексте зонда.

Например, в следующем некорректном сценарии SystemTap отсутствуют обработчики зондов:
probe vfs.read
probe vfs.write
Попытка запуска этого сценария SystemTap завершится неудачей с выводом сообщения об ошибке, указывающего на то, что система разбора сценария ожидала какое-либо другое ключевое слово вместо ключевого слова 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

Функция foo в сценарии используется для работы с некорректным типом данных (например, данные некорректного типа используются совместно с спецификатором форматирования %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

SystemTap не может присвоить значение переменной или элементу массива. Цель для присваивания не является корректной целью. При исполнении следующего примера сценария будет сгенерирована именно эта ошибка:
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. Источники дополнительной информации.