LIBDVM~1 (1158353), страница 3
Текст из файла (страница 3)
Функция возвращает нулевое значение.
7.ТРАССИРОВКА ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ И СИСТЕМЫ ПОДДЕРЖКИ
7.1.Общие сведения о накоплении информации трассировки
Будем называть внутренним событием (или просто событием) выполнение определенной точки или участка пользовательской программы или системы поддержки при определенных условиях. Системная трассировка является накоплением информации о происходящих событиях в их временной последовательности.
Событиями являются обращения ко всем функциям системы поддержки, доступным программе пользователя. Кроме того, прохождение некоторых внутренних участков системы поддержки и обращения к части ее внутренних функций также являются событиями. Примером трассируемых внутренних функций могут служить функции доступа к коммуникационным библиотекам. Трассируемое обращение к функции влечет трассировку и возврата из нее.
Полный список событий трассировки содержится в файле events.def исходных текстов системы поддержки, в котором имени каждого события сопоставлен его номер. Событие обращения к функции имеет имя call_<имя функции>, а событие возврата из нее - имя ret_<имя функции>.
Трассировка каждого события может быть включена и выключена по его номеру.
Накопление трассировочной информации система поддержки осуществляет с помощью функций, рассмотренных в п.7.3. Каждая из этих функций выводит информацию в текстовом виде в три независимо включаемых (открываемых) и выключаемых (закрываемых) потока трассировки:
-
поток информационных сообщений системы поддержки (трассировка на "видеомонитор", стандартно - это поток stderr);
-
буфер оперативной памяти;
-
файл.
Трассировка в поток информационных сообщений осуществляется согласно общим правилам управления выводом информационных сообщений (см.п.8).
При трассировке в буфер оперативной памяти информация накапливается в буфере каждого процессора до завершения выполнения программы, а затем выгружается в файл (свой для каждого процессора). Инициализация буферов трассировки производится при инициализации системы поддержки.
Трассировка в буфер предусматривает два варианта. В первом исчерпание размера буфера влечет останов трассировки (вариант сохранения начала трассировки). Второй вариант обеспечивает сохранение последней информации за счет уничтожения наиболее старой (вариант трассировки "по кольцу").
Трассировка в файл осуществляется выводом информации непосредственно в свой для каждого процессора файл по мере ее поступления. Файлы для непосредственного вывода трассировки открываются при инициализации системы поддержки и закрываются при завершении выполнения программы.
Все файлы с накопленной трассировкой система поддержки помещает в одну директорию (как при трассировке в буфер, так и при трассировке непосредственно в файлы). Имя этой директории, а также расширения файлов для каждого потока задаются в файле параметров systrace.* (см.п.1.1.7). Имена файлов с трассировкой имет вид <внутренний номер процессора>_<внешний номер процессора>.
Состав накапливаемой при трассировке информации определяется режимом трассировки. При кратком режиме выводится:
-
имя события;
-
время, прошедшее с предыдущего события;
-
имя файла пользовательской программы и номер строки в нем, определяющие точку произошедшего события в программе.
При подробном режиме трассировки сохраняемая информация расширяется и зависит от типа события. Если событием является обращение к функции, то выводятся ее входные параметры. При возврате из функции выводятся ее выходные параметры. Для каждого события может быть задан подробный режим трассировки вне зависимости от общего режима.
ЗАМЕЧАНИЕ. Системная трассировка функционирует только в том случае, если компиляция системы поддержки произведена с определенной переменной компиляции _DVM_TRACE_. Часть функций, тем не менее, при этом не трассируется. К таким функциям относятся функции, требующие высокой эффективности выполнения из-за предполагаемой большой частоты обращений к ним (например, функция tstelm_ проверки принадлежности заданного элемента распределенного массива его локальной части).
Для трассировки всех функций компиляцию системы поддержки необходимо осуществить, определив переменную компиляции _ALL_TRACE_ . Кроме того, для трассировки функций обращения к DVM-отладчику система поддержки должна быть скомпилирована с дополнительно определенной переменной компиляции _DEB_TRACE_ .
7.2.Управление накоплением трассировки с помощью файлов параметров
Управление режимами трассировки и составом трассируемых событий осуществляется с помощью параметров, содержащихся в файлах systrace.* и trcevent.* . Рассмотрим основные из них. По умолчанию считается, что параметр содержится в файлах systrace.* .
-
Включение и выключение трассировки
Is_DVM_TRACE - ненулевое значение этого параметра является общим признаком включенной трассировки.
TraceProcList - список внутренних номеров процессоров с включенной трассировкой. При общем включении трассировки она функционирует только на тех процессорах, которые заданы в этом списке.
IsEvent[<номер события>] - равное 1 или 2 значение этого параметра является признаком включенной трассировки события с номером <номер события>. Значение 2 задает трассировку заданного события в расширенном режиме вне зависимости от наличия общего режима расширенной трассировки. Нулевое значение параметра выключает трассировку заданного события. Параметр содержится в файлах trcevent.* .
BlockTrace - признак отложенного включения трассировки. При общем включении трассировки накопление начинается только по специальному указанию, осуществляемому с помощью функции void tron(void). Включенная трассировка может быть выключена функцией void troff(void) (а затем снова включена и т. д.).
-
Задание открытых (включенных) потоков трассировки
TracePath - имя директории, в которую помещаются файлы с трассировкой (как при трассировке в буфер, так и при трассировке непосредственно в файл). Если задается не пустое имя директории, то оно должно заканчиваться символом '\' или '/'.
ScreenTrace - ненулевое значение этого параметра означает вывод трассировки в поток информационных сообщений (признак вывода трассировки на "видеомонитор").
BufferTrace - признак накопления трассировки в буфер оперативной памяти.
TraceBufLength - длина буфера трассировки в байтах.
TraceBufferSuffix - расширение файлов с трассировкой при трассировке в буфер.
FileTrace - признак накопления трассировки непосредственно в файлах.
FatNoOpen - признак завершения работы при неудачном открытии файла для непосредственного накопления трассировки. При нулевом значении этого параметра неудачное открытие файла будет отмечено предупреждением.
TraceFileSuffix - расширение файлов с трассировкой при трассировке непосредственно в файлы.
-
Задание режимов трассировки
FullTrace - общий признак расширенного режима трассировки.
MaxTraceLevel - общая максимальная трассируемая глубина обращений к функциям. Нулевое значение этого параметра означает трассировку функций, непосредственно вызываемых программой пользователя.
MaxEventLevel[<номер события>] - максимальная трассируемая глубина обращений к функциям для события с номером <номер события>. Данный параметр имеет приоритет над параметром MaxTraceLevel. Параметр содержится в файлах trcevent.*
FullBufferStop - признак останова трассировки при исчерпании буфера. Нулевое значение этого параметра устанавливает сохранение последней информации при исчерпании буфера путем замещения ею наиболее старой информации.
TraceClosePrint - признак вывода информационных сообщений о завершении выгрузки буфера трассировки каждого процессора в файл.
-
Управление формой накапливаемой информации
KeyWordName - признак вывода последовательности символов 'NAME=' перед именем каждого события.
PreUnderLine - признак подчеркивания заголовка каждого события (заголовок события - это строка трассировки, содержащая имя события, время, имя файла и номер строки).
PreUnderLining - строка подчеркивания заголовка каждого события.
PostUnderLine - признак подчеркивания строки, завершающей выводимую по каждому событию информацию.
PostUnderLining - строка подчеркивания выводимой по каждому событию информации.
BufferTraceShift - коэффициент текущей глубины обращений к трассируемым функциям для вычисления сдвига вправо выводимой информации при трассировке в буфер. Каждой выводимой строке будет предшествовать пробелы в количестве, равном произведению данного параметра на текущую глубину обращений к трассируемым функциям.
FileTraceShift - коэффициент текущей глубины обращений к трассируемым функциям для вычисления сдвига вправо выводимой информации прирассировке непосредственно в файлы.
-
Управление механизмами внутреннего самоконтроля системы поддержки, функционирующими при накоплении трассировки
В процессе накопления трассировочной информации система поддержки может контролировать определенные области оперативной памяти, при изменении содержимого которых она завершает выполнение программы с выводом соответствующего сообщения об ошибке. К таким областям относятся:
-
левые (нижние) и правые (верхние) контрольные части каждого динамически запрошенного блока памяти;
-
область памяти, явно задаваемая в файлах параметров systrace.* своими начальным и конечным адресами;
-
область памяти с программным кодом пользовательской программы и системы поддержки (память команд).
Контрольные части динамически запрашиваемых блоков памяти создаются при специальном указании в файлах параметров sysdebug.* и расписываются задаваемым там же кодом при выделении блока. Контроль их содержимого может осуществляться при каждом запросе и освобождении блока памяти, а также в процессе трассировки.
Явно задаваемая область памяти контролируется путем сравнения ее эталонной контрольной суммы с текущей. Эталонная контрольная сумма вычисляется при инициализации системы поддержки.
Начальный и конечный адреса области памяти с программным кодом задаются программой, запускающей на выполнение систему поддержки, посредством записи этих адресов в ее (системы поддержки) исполняемый модуль. Эта же программа вычисляет и записывает в исполняемый модуль системы поддержки эталонную контрольную сумму памяти команд. Система поддержки в процессе своего функционирования (в частности, по событиям трассировки) контролирует память команд, сравнивая ее текущую контрольную сумму с эталонной.
Управление механизмами контроля областей памяти осуществляется с помощью следующих параметров файлов systrace.* .
EveryEventCheckBound - признак контроля всех динамически запрошенных блоков памяти по каждому трассируемому событию.
EveryTraceCheckBound - признак контроля всех динамически запрошенных блоков памяти при каждом обращении к функциям вывода трассировки, описанным в п.7.3. Данный контроль включает в себя контроль, задаваемый параметром EveryEventCheckBound, поскольку осуществляется и по не трассируемым (выключенным) событиям.
dvm_StartAddr - начальный адрес, контролируемый при трассировке области памяти.
dvm_FinalAddr - конечный адрес контролируемой при трассировке области памяти.
EveryEventCheckMem - признак контроля области памяти, заданной параметрами dvm_StartAddr и dvm_FinalAddr, при каждом трассируемом событии.
EveryTraceCheckMem - признак контроля заданной параметрами dvm_StartAddr и dvm_FinalAddr области памяти при каждом обращении к описанным в п.7.3 функциям вывода трассировки. Данный контроль включает в себя контроль, задаваемый параметром EveryEventCheckMem, т.к. проводится и по выключенным событиям трассировки.















