<= Отладка DVM-программ (начало)

Отладка DVM-программ (продолжение)
* Февраль, 2001*

- дата последнего обновления 07.10.02 -


11 Параметры DVM-системы

Базовые наборы параметров, управляющих работой системы поддержки, передается пользователю вместе с DVM-системой и располагается в директории dvm_sys/par. Имена файлов отражают назначение содержащихся в них параметров, а именно:

checksum - контрольные суммы перечисленных ниже файлов параметров (проверяются только при запуске с файлами параметров с расширением .rel без их коррекции);
statist - паpаметpы, задающие режимы сбора данных для работы анализатора производительности DVM-программ;
sysdebug - паpаметpы встpоенных сpедств отладки системы поддержки;
syspar - паpаметpы, упpавляющие функционированием системы поддеpжки;
systrace - паpаметpы, задающие режимы системной тpассиpовки;
trcevent - перечень и паpаметpы тpассиpуемых событий;
usrdebug - параметры динамического контроля и трассировки программы пользователя.

Расширения имен файлов отражают способ применения данного подмножества параметров, а именно:

rel - набор параметров, предназначенный для максимально быстрого выполнения программы;
deb - набор параметров, предназначенный для отладки программы пользователя и системы поддержки; встроенные в систему поддержки средства внутреннего самоконтроля, сбора системной трассировки и выдачи информационных сообщений в нем включены;
par - наборы корректирующих параметров.

К корректирующим наборам параметров относятся файлы с именами:

deb_err, deb_trc, deb_red, deb_dif, deb_size, deb_ptrc - параметры, используемые для выполнения dvm-команд в соответствии с методикой отладки программ (см.п.10);
out - паpаметpы вывода информационных сообщений системы поддержки, действующие, если переменная окружения dvmout=on (см.п.7 и п.11.3);
outoff - паpаметpы вывода информационных сообщений системы поддержки, действующие, если переменная окружения dvmout=off (см.п.7 и п.11.3).

Пользователь выбирает наиболее подходящий для его целей базовый набор, задав соответствующее расширение в переменной окружения dvmpar. Он может также иметь собственные наборы параметров (в любой из своих рабочих директорий и с любыми именами и расширениями файлов), корректирующие базовый набор. В них пользователь задает только те параметры (содержащиеся в любом из файлов с расширениями .rel или .deb), значения которых он желает скорректировать. Эти директории и имена файлов должны быть перечислены в переменной окружения usrpar файла запуска dvm-команд (см.п.7).

Все параметры базового набора снабжены комментариями. Полные списки параметров динамического контроля и пользовательской трассировки приведены в п.п. 11.1 и 11.2. Параметры вывода информационных сообщений системы поддержки и основные параметры управления системной трассировкой (как наиболее часто используемые при отладке программ) рассмотрены в п.п. 11.3 и 11.4.

11.1 Параметры динамического контроля

Перечисленные ниже параметры содержатся в файлах с именем usrdebug.

11.2 Параметры накопления и сравнения трассировки вычислений

Перечисленные ниже параметры содержатся в файлах с именем usrdebug.

0 - генерация конфигурационного файла трассировки. Пишет только процессор с номером TraceOptions.WrtHeaderProc.
1 - сбор трассировки и запись в файл <номер процессора>.<TraceOptions.Ext>.
2 - объединение двух предыдущих режимов.
3 - сравнение трассировки с эталонной, заданной в файле TraceOptions.TraceFile.
0 - трассировка не собирается;
1 - сбор информации только о циклах и итерациях;
2 - то же, что и предыдущее, плюс сбор информации о модификациях переменных;
3 - сбор полной информации.

11.3 Параметры перенаправления стандартных выходных потоков и управления выводом информационных сообщений системы поддержки

Перечисленные ниже параметры содержатся в файлах с именами syspar, statist, systrace, trcevent, sysdebug и usrdebug. По умолчанию будем считать, что параметр задается в файлах с именем syspar.

11.4 Параметры управления системной трассировкой

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

11.4.1 Включение и выключение трассировки

11.4.2 Задание открытых (включенных) потоков трассировки

11.4.3 Задание режимов трассировки

11.4.4 Управление формой накапливаемой информации

11.4.5 Управление механизмами внутреннего самоконтроля системы поддержки, функционирующими при накоплении трассировки

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

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

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

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

Управление механизмами контроля областей памяти осуществляется с помощью следующих параметров файлов systrace.* .

11.4.6 Управление выводом дополнительной информации при трассировке некоторых функций системы поддержки в расширенном режиме

0 - не выводить дополнительной информации;
1 - выводить выходные начальные и конечные значения индексных переменных параллельного цикла для текущего процессора;
2 - дополнительно выводить карту отображения цикла.

12 Диагностические сообщения динамического отладчика

Общая структура сообщения об ошибке динамического отладчика:

(<process number>)<context> File: <file>, Line: <line> (<count> times)<error message>

где:

<process number> - номер процессора, на котором произошла ошибка.
Выводится, только при запуске программы на нескольких процессорах.
<context> - контекст, в котором произошла ошибка.
Может иметь одну из следующих форм:
  sequential branch - ошибка произошла в последовательной части программы;
  Loop( No(N1), Iter(I1,I2,…)), …, Loop( No(Nm), Iter(I1,I2,…)) - ошибка произошла в ходе выполнения цикла m-степени вложенности.
<file> - имя файла, где произошла ошибка.
<line> - номер строки.
<count> - число повторений данной ошибки в данном контексте. Выводится при суммарной выдаче всех найденных ошибок.
<error message> - Сообщение о произошедшей ошибке.

12.1 Динамический контроль

Сообщение

Описание

Writing to read-only variable<var> Обнаружена запись в переменную, которая доступна только для чтения.
Using non-initialized private variable <var> Обнаружено обращение к неинициализированной переменной.
Using non-initialized element <elem> Обнаружено обращение к неинициализированному элементу распределенного массива.
Using variable <var> before asynchronous reduction competed Обращение к редукционной переменной до завершения операции редукции.
Access to non-local element <elem> Обращение к нелокальному элементу массива.
Writing to shadow element <elem> of array Запись в теневой элемент массива.
Shadow element <elem> was not updated Обращение к теневым элементам до завершения операции пересылки границ.
Data dependence in loop due to access to element <elem> Обнаружена зависимость параллельного цикла по данным.
Using shadow element <elem> before asynchronous shadow renew competed Использование теневого элемента <elem> распределенного массива во время выполнения операции обновления теневых граней.
Writing to remote data buffer <var> Запись в буфер удаленного доступа <var>
Write to remote element <elem> in sequential branch Запись в элемент <elem> распределенного массива в последовательной части программы без спецификации собственных вычислений.
Reading remote element <elem> in sequential branch Использование нелокального элемента <elem> распределенного массива в последовательной части программы.
WAIT for reduction without START Ожидание завершения редукции без ее фактического запуска.
Using an element outside of array limits: <elem> Обращение к элементу массива за пределами его границ.
START for reduction without WAIT Отсутствие операции ожидания завершения асинхронной редукции для соответствующей операции старта асинхронной редукции.
Reduction operation was not started Специфицирована редукционная переменная, но соответствующее вычисление редукционной операции никогда не было стартовано.

12.2 Накопление и сравнение трассировки

Сообщение

Описание

Bad file structure Нарушена структура файла трассировки.
Undefined keyword Файл трассировки содержит неизвестное ключевое слово.
Bad command syntax Неправильная структура записи трассировки.
Can't open a file <file name> Невозможно открыть указанный файл.
Trace file <file name> is empty Указанный файл трассировки не содержит информации.
Bad trace structure (missing current program construct) Нарушена структура файла трассировки. Отсутствует запись начала исполняемой конструкции.
No current program construct Отсутствует запись начала исполняемой конструкции.
Unexpected task or iteration of loop Эталонная трассировка не содержит записи о выполнении данной итерации или задачи.
Double execution of task or iteration, No = <iter no> Повторное исполнение той же итерации или задачи.
Unexpected execution of program construct Эталонная трассировка не содержит записи о начале выполнения данного цикла или задачи.
Abnormal loop exit Завершение цикла не соответствует записи в эталонной трассировке.
Unexpected use of variable Эталонная трассировка не содержит записи об использовании данной переменной.
Unexpected trace record Эталонная трассировка не содержит записи о исполнении данного события.
Different <type> values: <standard value> != <current value> Значение переменной не соответствует эталонной трассировке.
Different <type> values of reduction variable: <standard value> != <current value> Значение результата вычисления редукции не соответствует эталонной трассировке.

13 Структура конфигурационного файла трассировки

# Trace size = <размер всего файла трассировки в байтах>
# String count = <число строк всего файла трассировки>
SL, PL или TR <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)
  # Trace size = <размер трассировки в байтах данной конструкции для указанного уровня накопления трассировки>
  # String count = <число строк трассировки данной конструкции для указанного уровня накопления трассировки >
  # Count of traced iterations = <число трассируемых итераций цикла или задач>

EL: <номер конструкции>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SL, PL или TR <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)
  # Trace size = <размер трассировки в байтах данной конструкции для указанного уровня накопления трассировки>
  # String count = <число строк трассировки данной конструкции для указанного уровня накопления трассировки >
  # Count of traced iterations = <число трассируемых итераций цикла или задач>

EL: <номер конструкции>

14 Структура трассировки вычислений

При трассировке вычислений накапливаемая трассировочная информация состоит из двух частей:

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

MODE = <уровень накопления трассировки для всей программы>,

SL, PL или TR <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)

EL: <номер конструкции>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SL, PL или TR <номер конструкции> (<номер объемлющей конструкции>) [<размерность конструкции>] {<имя файла>, <номер строки>} = <уровень накопления трассировки>, (<измерение> : <первая итерация> , <последняя итерация> , <шаг трассируемых итераций>)

EL: <номер конструкции>

Тело трассировки отсутствует, когда накопление трассировки отключено для всей программы. Иначе тело трассировки состоит из множества записей следующих типов:

15 Сообщения об ошибках системы поддержки

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

В соответствии с этим сообщения об ошибках имеют один из следующих видов:

*** RTS warning <номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке>
*** RTS err <номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке>
*** RTS fatal err <номер класса ошибки> . <номер ошибки внутри класса> : <текст сообщения об ошибке>

Класс ошибки определяется функциональной и модульной структурой системы поддержки.

Каждое сообщение об ошибке завершает вывод имени файла и номера строки, в которой произошла ошибка, как пользовательской программы, так и системы поддержки:

USRFILE=<имя файла программы пользователя>; USRLINE=<номер строки>;
SYSFILE=<имя файла системы поддержки>; SYSLINE =<номер строки>;

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

В системе поддержки предусмотрены возможности вывода всех сообщений об ошибках первой группы всеми процессорами и вывода всех сообщений об ошибках второй группы только процессором ввода/вывода. Первая возможность достигается установкой значения параметра MultiProcErrReg (файлы параметров с именем syspar) равным 2. Для вывода сообщений об ошибках второй группы только процессором ввода/вывода значение этого параметра должно быть нулевым (эта возможность используется только в экспериментальных целях). Стандартное значение параметра MultiProcErrReg равно единице.

Все ообщения об ошибках с их тематическим разбиением и в порядке возрастания номеров классов и номеров ошибок внутри класса рассмотрены в документе "Система поддержки DVM-программ. Детальный дизайн" (файл rtsDDr.doc).

Ниже перечислены номера сообщений, сгруппированных по возможным причинам их возникновения. Номера сообщений "fatal error" опущены. Не рассматриваются также ошибки, которые не могут возникать в программах, генерируемых компиляторами C-DVM и F-DVM (при правильной работе компиляторов), а возможны только при программировании непосредственно с помощью функций системы поддержки (впрочем, при "затирании" памяти программой пользователя в любой программе возможны любые ошибки).

15.1 Ошибки запуска и завершения

Эти ошибки диагностируются сообщениями с номерами 01x.xxx и 02x.xxx.

Среди них:

Кроме того, при завершении программы возможны также сообщения с номерами 022.002 и 022.003, свидетельствующие о неверной контрольной сумме памяти команд или данных, т.е. об изменении памяти, которая не должна была изменяться ("затирание памяти").

Во время выполнения программы о "затирании" памяти могут говорить также сообщения со следующими номерами: 230.000, 230.001, 230.002, 230.003, 230.004, 250.000, 250.001.

15.2 Ошибки вида "... is not a DVM object"

"Объект, заданный при обращении к функции, не является DVM-объектом".

Возможная причина: объект используется до его создания/инициализации или когда объект уже уничтожен.

Номера сообщений:

030.000, 030.010, 030.020, 032.000, 032.010, 032.015, 032.020, 032.030, 032.050, 032.070, 032.080, 032.085, 036.000, 036.010, 036.060, 036.066, 037.000, 037.010, 037.020, 038.000, 038.010, 038.012, 038.014, 038.032, 038.038, 038.040, 038.050, 044.000, 044.040, 046.011, 046.014, 046.050, 046.054, 046.090, 060.010, 060.065, 060.075, 060.115, 065.000, 065.003, 065.020, 069.020, 070.000, 070.002, 070.010, 070.016, 070.030, 070.040, 070.050, 070.060, 070.070, 070.080, 080.000, 080.020, 080.040, 080.050, 080.060, 080.070, 080.080, 080.150, 080.160, 080.200, 080.250, 120.006, 130.065, 132.010, 132.030, 132.040, 132.050, 144.010, 144.030, 144.040, 144.050, 219.000.

15.3 Ошибки вида "[the object] is not a/the …"

"Объект, заданный при обращении к функции, не является объектом нужного вида".

Соответствие вида объекта и выполняемой операции как правило контролируется C-DVM и F-DVM компиляторами. Возникновение такой ошибки при выполнении программы скорее всего вызвано "затиранием" [дескриптора] объекта.

Номера сообщений:

030.001, 030.011, 030.021, 032.001, 032.011, 032.016, 032.021, 032.031, 032.051, 032.071, 032.081, 032.086, 036.001, 036.011, 036.061, 036.067, 037.001, 037.011, 037.021, 038.001, 038.011, 038.013, 038.015, 038.033, 038.039, 038.041, 038.051, 040.005, 040.008, 040.010, 044.001, 044.002, 044.041, 044.042, 044.060, 046.000, 046.010, 046.012, 046.015, 046.051, 046.052, 046.055, 046.091, 060.011, 060.012, 060.013, 060.050, 060.051, 060.060, 060.061, 060.066, 060.070, 060.071, 060.076, 060.080, 060.081, 060.090, 060.091, 060.100, 060.116, 060.200, 065.001, 065.004, 065.021, 069.021, 070.001, 070.003, 070.008, 070.014, 070.031, 070.041, 070.051, 070.061, 070.071, 070.081, 080.001, 080.002, 080.021, 080.022, 080.041, 080.051, 080.061, 080.071, 080.081, 080.151, 080.161, 080.201, 080.202, 080.251, 080.252, 090.000, 090.001, 090.010, 090.011, 090.020, 090.030, 090.040, 090.050, 090.051, 090.060, 092.000, 092.001, 092.010, 092.011, 092.020, 094.000, 096.000, 110.000, 110.003, 110.009, 110.012, 120.000, 120.001, 120.002, 120.003, 120.005, 130.001, 130.004, 130.005, 130.031, 130.035, 130.061, 130.066, 131.000, 131.001, 131.020, 131.022, 131.040, 131.042, 132.011, 132.014, 132.016, 132.031, 132.041, 132.051, 133.001, 133.004, 133.005, 140.001, 140.020, 140.021, 140.030, 141.001, 141.030, 143.000, 143.001, 143.020, 143.022, 143.040, 143.042, 144.011, 144.014, 144.016, 144.031, 144.041, 144.051, 219.001, 219.010, 219.011, 219.020, 219.021.

15.4 Ошибки вида "… is not a subsystem of the current/parental PS"

"Процессорная система, заданная при обращении к функции, не является текущей/родительской процессорной системой или непосредственной или косвенной её подсистемой".

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

Номера сообщений:

032.012, 032.013, 032.032, 032.052, 032.082, 032.083, 036.012, 036.013, 036.068, 036.069, 038.025, 038.026, 038.042, 038.043, 044.003, 044.044, 044.045, 046.017, 046.058, 046.059, 070.013, 070.027, 080.006, 080.025, 080.047, 080.057, 080.067, 080.157, 080.167, 080.206, 080.255, 090.004, 090.005, 090.014, 090.015, 090.023, 090.024, 092.004, 092.005, 092.014, 092.015, 092.023, 092.024, 094.006, 094.007, 096.006, 096.007, 101.001, 101.011, 110.002, 110.005, 110.011, 110.014, 130.003, 130.033, 130.037, 130.063, 130.067, 131.004, 131.005, 132.032, 132.033, 133.003, 140.003, 140.033, 141.003, 141.033, 143.004, 143.005, 144.032, 144.033, 219.002.

15.5 Ошибки вида "…was not created by the current subtask" и "…was not started by the current subtask"

"Заданный при обращении к функции объект создан не в текущей подзадаче" и "Заданная при обращении к функции асинхронная операция запущена не текущей подзадачей".

Сообщения диагностируют нарушение иерархии подсистем. Например, подзадача пытается использовать/изменять объект, принадлежащий другой подзадаче. Или подзадача осуществила попытку ожидания асинхронной операции (т.е. реализуемой парой операторов START- WAIT), запущенной другой подзадачей.

Номера сообщений:

060.067, 060.077, 060.117, 065.006, 069.022, 070.005, 070.006, 070.032, 070.042, 070.052, 070.062, 070.072, 070.082, 080.003, 080.023, 080.056, 080.066, 080.073, 080.082, 080.156, 080.166, 080.203, 080.253, 120.008, 131.023, 131.043, 132.012, 132.017, 132.042, 132.052, 143.023, 143.043, 144.012, 144.017, 144.042, 144.052.

15.6 Ошибки вида "…has not been aligned/mapped" и "…has already been aligned/mapped"; "…does not exist" и "…already exists"

Вероятная причина таких ошибок - нарушение порядка создания/использования массивов и других DVM-объектов. Например, массив A, выравненный на массив B, может быть создан (оператором malloc) только если массив B уже существует (создан). Аналогично, параллельный цикл по массиву может быть выполнен только если массив уже существует. Или наоборот, выполняется повторное создание объекта. Заметим, что повторное создание массива (malloc) в последовательной программе могло пройти незамеченным; а (повторное) создание темплейта или группы границ вообще невидимо для последовательной программы.

Номера сообщений:

032.017, 032.088, 036.002, 036.003, 036.014, 036.051, 038.002, 038.020, 038.021, 038.024, 038.031, 040.000, 040.006, 044.005, 044.006, 044.047, 046.001, 046.019, 046.020, 046.061, 060.014, 060.015, 060.052, 060.062, 060.072, 060.082, 060.101, 060.201, 065.007, 065.009, 065.022, 070.009, 070.015, 080.005, 080.024, 080.205, 080.254, 090.002, 090.003, 090.012, 090.013, 090.021, 090.022, 090.041, 090.031, 090.052, 090.053, 090.061, 092.002, 092.003, 092.012, 092.013, 092.021, 092.022, 094.004, 094.005, 096.004, 096.005, 101.000, 101.010, 110.001, 110.004, 110.010, 110.013, 130.000, 130.002, 130.006, 130.030, 130.032, 130.036, 130.060, 130.062, 133.000, 133.002, 133.006, 140.000, 140.002, 140.022, 140.032, 141.000, 141.002, 141.032, 219.012, 219.022.

15.7 Ошибки вида "… has already been started/inserted …", "… has not been started/completed" и "… the reduction group is empty"

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

Номера сообщений:

060.120, 060.140, 069.023, 070.004, 070.033, 070.034, 070.044, 070.053, 070.054, 070.063, 070.073, 070.083, 080.007, 080.008, 080.009, 080.010, 080.011, 080.026, 080.027, 080.028, 080.029, 080.030, 080.042, 080.043, 080.044, 080.045, 080.046, 080.052, 080.053, 080.054, 080.062, 080.063, 080.064, 080.072, 080.083, 080.152, 080.153, 080.154, 080.162, 080.163, 080.164, 080.207, 080.208, 080.209, 080.210, 080.211, 080.256, 080.257, 080.258, 080.259, 080.260, 131.003, 131.024, 131.044, 131.045, 132.013, 132.019, 132.034, 132.043, 132.053, 143.003, 143.024, 143.044, 143.045, 144.013, 144.019, 144.034, 144.043, 144.053.

15.8 Ошибки индексации и значений

Ошибки данного типа возникают при выходе индекса за граница некоторой размерности DVM-объекта (например, при выравнивании массива или описании параллельного цикла), индексировании по несуществующей размерности, неправильном соотношении между индексами (например, начальный индекс больше конечного), неверной размерности DVM-объекта и т.п.. Некорректные значения могут передаваться системе поддержки, например, в векторе GENBLOCK или как размеры теневых граней (или в результате "затирания" памяти). Сообщения системы поддержки могут содержать выражение вида (<равенство или неравенство>) - нарушенное соотношение. Описание величин, включенных в каждое такое сообщение, можно найти в документе "Система поддержки DVM-программ. Детальный дизайн" (файл rtsDDr.doc).

Номера сообщений:

030.022, 030.023, 032.019, 032.022, 032.035, 032.036, 032.037, 032.038, 032.039, 032.055, 032.056, 032.057, 032.090, 032.091, 032.092, 036.020. 036.021, 036.022, 036.023, 036.024, 036.025, 036.026, 037.002, 037.003, 037.012, 037.022, 038.016, 038.017, 038.044, 038.045, 040.001, 040.002, 040.003, 044.019, 044.020, 044.021, 044.022, 044.023, 044.024, 044.025, 044.026, 044.027, 044.028, 046.013, 046.016, 046.030, 046.031, 046.056, 046.057, 060.000, 060.001, 060.019, 060.020, 060.021, 060.022, 060.023, 060.024, 060.025, 060.026, 060.027, 060.028, 060.029, 060.030, 069.000, 069.001, 069.002, 069.003, 069.024, 080.014, 080.015, 080.031, 080.032, 080.033, 080.034, 080.035, 080.214, 080.215, 080.216, 080.220, 080.225, 080.226, 080.227, 080.230, 080.235, 080.236, 080.237, 080.261, 080.264, 080.265, 080.266, 080.270, 080.275, 080.276, 080.277, 080.280, 080.285, 080.286, 080.287, 080.290, 080.291, 094.001, 094.002, 094.003, 096.001, 096.002, 096.003, 110.006, 110.015, 120.004, 120.200, 130.010, 130.011, 130.012, 130.013, 130.014, 130.015, 130.016, 130.017, 130.018, 130.019, 130.040, 130.041, 130.042, 130.043, 130.044, 130.045, 130.046, 130.047, 130.070, 140.010, 140.011, 140.023, 140.031. 140.036, 140.037, 140.038, 140.041, 140.042, 140.043, 140.044, 141.010, 141.011, 141.031, 141.036, 141.037, 141.038, 219.015, 219.016, 219.017, 219.025, 219.026, 219.027.

15.9 Другие семантические ошибки

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

Номера сообщений:

030.002, 036.050, 036.065, 038.030, 038.037, 044.043, 046.053, 065.005, 065.010.

Попытка выполнения параллельного цикла с изменённым порядком витков по схеме ACCROSS (по схеме выполнения циклов с зависимостью по данным между витками).

Номера сообщений: 060.110, 060.111.

Попытка расширения множества локальных витков параллельного цикла с изменённым порядком выполнения витков.

Номера сообщений: 060.210, 060.211.

Включение одной и той же редукционной переменной в две различные группы.

Номер сообщения: 070.007.

Массивы в поддирективе SHADOW_START или SHADOW_WAIT параллельного цикла распределены иначе, чем сам цикл.

Номер сообщения: 060.040.

Неверно распределённые объекты в нерегулярном удалённом доступе (например, число распределённых измерений удалённого массива не равно единице).

Номера сообщений: 140.004, 140.034, 140.035, 140.040, 140.050, 140.051, 141.004, 141.034, 141.035.

15.10 Ошибки запроса памяти и количества объектов

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

Номера сообщений:

200.000, 200.001, 200.002, 200.003, 200.004, 200.005, 200.006, 200.007, 200.008.

Следующие сообщения выдаются, когда создано слишком много объектов (распределенных массивов, буферов удаленного доступа). В C-DVM такие ошибки могут быть вызваны несбалансированностью операторов malloc и free для распределенных массивов или использованием локальных в функции (или блоке) "статических" распределенных массивов (т.е. массивов с константными размерностями).

Номера сообщений:

040.004, 040.007, 130.029, 140.060.

15.11 Ошибки нижнего уровня передачи сообщений

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

Причиной могут служить:

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

Номера сообщений:

210.000, 210.001, 210.002, 210.003, 210.004, 210.005, 212.000, 212.001, 212.002, 212.003, 213.000, 213.001, 213.002, 214.000, 214.001, 219.003.

16 Структура файла системной трассировки

Файл системной трассировки имеет следующую структуру:

Трассировка каждого события может быть включена и выключена по его номеру (см. п.п. 6 и 11.4).

Состав накапливаемой при трассировке информации определяется режимом трассировки. При кратком режиме выводится:

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

Накапливаемая при трассировке информация содержит также все информационные сообщения и сообщения об ошибках системы поддержки.

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