rtsDDr (1158447), страница 4
Текст из файла (страница 4)
Явно задаваемая область памяти контролируется путем сравнения ее эталонной контрольной суммы с текущей. Эталонная контрольная сумма вычисляется при инициализации системы поддержки.
Начальный и конечный адреса области памяти с программным кодом задаются программой, запускающей на выполнение систему поддержки, посредством записи этих адресов в ее (системы поддержки) исполняемый модуль. Эта же программа вычисляет и записывает в исполняемый модуль системы поддержки эталонную контрольную сумму памяти команд. Система поддержки в процессе своего функционирования (в частности, по событиям трассировки) контролирует память команд, сравнивая ее текущую контрольную сумму с эталонной.
Управление механизмами контроля областей памяти осуществляется с помощью следующих параметров файлов systrace.* .
-
EveryEventCheckBound признак контроля всех динамически запрошенных блоков памяти по каждому трассируемому событию.
-
EveryTraceCheckBound признак контроля всех динамически запрошенных блоков памяти при каждом обращении к функциям вывода трассировки, описанным в п.7.3. Данный контроль включает в себя контроль, задаваемый параметром EveryEventCheckBound, поскольку осуществляется и по не трассируемым (выключенным) событиям.
-
dvm_StartAddr начальный адрес, контролируемый при трассировке области памяти.
-
dvm_FinalAddr конечный адрес контролируемой при трассировке области памяти.
-
EveryEventCheckMem признак контроля области памяти, заданной параметрами dvm_StartAddr и dvm_FinalAddr, при каждом трассируемом событии.
-
EveryTraceCheckMem признак контроля заданной параметрами dvm_StartAddr и dvm_FinalAddr области памяти при каждом обращении к описанным в п.7.3 функциям вывода трассировки. Данный контроль включает в себя контроль, задаваемый параметром EveryEventCheckMem, т.к. проводится и по выключенным событиям трассировки.
-
EveryEventCheckCodeMem признак контроля области памяти с программным кодом по каждому трассируемому событию.
-
EveryTraceCheckCodeMem признак контроля области памяти с программным кодом при каждом обращении к функциям вывода трассировки, рассмотренным в п.7.3. Данный контроль включает в себя контроль, задаваемый параметром EveryEventCheckCodeMem.
Кроме рассмотренных выше средств контроля заданных областей памяти, система поддержки предоставляет также возможность вывода в трассировку значения заданной переменной, управляемого следующими параметрами файлов systrace.* :
-
TraceVarAddr = <адрес выводимой в трассировку переменной>;
-
TraceVarType = <номер типа выводимой в трассировку переменной>;
Адрес переменной может задаваться в десятичном или шестнадцатеричном виде (по правилам языка C). При нулевом значении адреса вывод переменной в трассировку не осуществляется.
Номер типа переменной может принимать значения:
-
int;
-
long;
-
float;
-
double;
-
char;
-
short.
При указания номера типа, отличающегося от перечисленных выше, вывод переменной в трассировку не производится.
7.2.6Управление выводом дополнительной информации при трассировке некоторых функций системы поддержки в расширенном режиме
-
distr_Trace – признак вывода дополнительной информации при трассировке функции distr_. Выводится карта отображения представления абстрактной машины, диапазоны локальных значений индексов для каждого измерения представления абстрактной машины, признак размножения по всем измерениям процессорной подсистемы (Repl) и признак отображения на каждый процессор какого-либо (не обязательно одного и того же) элемента представления абстрактной машины (Every).
-
align_Trace – признак вывода дополнительной информации при трассировке функции align_. Выводится карта отображения распределённого массива и диапазоны локальных значений индексов для каждого его измерения.
-
mappl_Trace – режим вывода дополнительной информации при трассировке функции mappl_:
0
не выводить дополнительной информации;
1
выводить выходные начальные и конечные значения индексных переменных параллельного цикла для текущего процессора;
2
дополнительно выводить карту отображения цикла.
-
dopl_Trace – признак вывода дополнительной информации при трассировке функции dopl_. Выводится очередная порция диапазонов локальных значений индексов для каждого измерения параллельного цикла.
-
PLTimeTrace признак вывода информации о времени выполнения групп витков параллельных циклов.
-
RedVarTrace – признак вывода адресов, типов и значений всех переменных редукционной группы при выполнении функций saverv_ и strtrd_ , а также в начале и конце выполнения функции waitrd_ .
-
OutIndexTrace – признак вывода выходных значений индексов для каждого измерения распределённого массива при выполнении внутренней функции системы поддержки GetIndexArray.
-
diter_Trace – признак вывода массива индексов при трассировке функции взаимодействия с DVM-отладчиком diter_.
-
drmbuf_Trace – признак вывода массива индексов при трассировке функции взаимодействия с DVM-отладчиком drmbuf_.
-
dyn_GetLocalBlock_Trace – признак трассировки вспомогательной функции DVM-отладчика dyn_GetLocalBlock.
7.3Функции вывода информации в потоки трассировки
Вывод информации в потоки трассировки осуществляется с помощью следующих функций (параметр format и следующие за ним параметры аналогичны соответствующим параметрам функции printf библиотеки языка C).
int tprintf (char *format, ... );
Функция осуществляет вывод информации во все открытые потоки трассировки. Возвращается число выведенных символов.
| int pprintf ( | int | prefix, |
Функция выводит информацию в открытые потоки трассировки, направленные в буфер оперативной памяти и непосредственно в файл. Кроме того, вывод производится в потоки, предназначенные для вывода информационных сообщений системы поддержки (параметр prefix равен 0 или 1), либо в потоки, предназначенные для вывода сообщений об ошибках (prefix равен 2 или 3) (см.п.8).
При значении параметра prefix, равном 1 или 3, вывод осуществляет каждый процессор решающего поля, предваряя заданную информацию своим номером (см.п.1.3 и п.4). Если значение prefix равно 0 или 2, то вывод информации в потоки трассировки осуществляет каждый процессор решающего поля, а в остальные потоки только главный процессор (см.п.4). Предварительный вывод номера процессора в этом случае не производится.
Возвращается число выведенных символов.
| void dvm_trace ( | int | number, |
Функция выводит информацию о состоявшемся событии с номером number во все открытые потоки трассировки. Выводимая информация состоит из:
-
стандартной информации для события трассировки с номером number;
-
дополнительной информации, заданной параметром format и последующими параметрами, если таковые имеются.
Стандартная информация включает в себя:
-
имя события трассировки с номером number;
-
время выполнения программы, прошедшее с момента предыдущего фактического вывода информации в потоки трассировки с помощью функции dvm_trace;
-
имя файла и номер строки, вместе определяющие точку произошедшего события с номером number.
Фактический вывод информации в потоки трассировки происходит лишь в том случае, если событие с номером number включено.
Вывод дополнительной информации осуществляется только в расширенном режиме трассировки или при задании такого режима отдельно для события с номером number.
Имя файла и номер строки, определяющие точку произошедшего события, сообщаются программе трассировки макровызовом DVM_CALL. Название макроса проистекает из того, что все события трассировки, за несколькими исключениями, это вызовы функций системы поддержки. Если событие произошло внутри системы поддержки и событием является обращение к функции, то используется макровызов RTL_CALL. Макровызовы DVM_CALL и RTL_CALL должны исполнительно предшествовать событию и максимально к нему приближены (по расположению в файле с программой). Таким образом, трассировка событий осуществляется по следующей схеме:
DVM_CALL; (или RTL_CALL;)
……………………..
< точка наступившего события >
..................................
dvm_trace( ........ );
Трассировка функций системы поддержки организована таким образом, что обращение к dvm_trace происходит внутри трассируемой функции. Наиболее предпочтительным способом использования макровызовов DVM_CALL и RTL_CALL при трассировке функций является применение операции последовательного вычисления:
( DVM_CALL , < обращение к функции > )
или
( RTL_CALL , < обращение к функции > ) .
В этом случае номер строки, сообщаемый программе трассировки, будет точно равен номеру строки наступившего события (обращения к функции), а обращение к функции в любом выражении языка C может быть эквивалентно заменено на какую-либо из вышеприведенных конструкций.
ЗАМЕЧАНИЕ. Имя файла и номер строки, определяющие точку наступившего события, могут быть сообщены системе поддержки также с помощью функций
| long fname_ ( | char | *FileNamePtr, |
| long lnumb_ ( | long | *LineNumberPtr ); |
| FileNamePtr | | указатель на текстовую строку с именем файла. |
| FileNameLength | | длина строки с именем файла в байтах. |
| *LineNumberPtr | | номер строки. |
При выполнении функции fname_ последнему байту строки с именем файла будет присвоено нулевое значение. Функции возвращают нулевые значения.
Данные функции могут быть использованы препроцессорными программами для "привязки" точки предполагаемого события к своему входному тексту.
Отметим, что последовательность обращений
long line;
..............................
..............................
line = __LINE__ ;
fname_ ( __FILE__ ,
strlen(__FILE__)+1 ) ;
lnumb_ ( &line ) ;
эквивалентна макровызову
DVM_CALL ; .
| void eprintf ( | char | *FileNamePtr, |
Функция выводит информацию в открытые потоки трассировки, направленные в буфер оперативной памяти и непосредственно в файл, а также в потоки, предназначенные для сообщений об ошибках (см.п.8), после чего завершает выполнение программы пользователя и системы поддержки. Информации, выводимой в потоки, предназначенные для сообщений об ошибках, предшествует вывод номера текущего процессора.
После вывода информации, заданной параметром format и последующими параметрами (если таковые имеются), выводятся строка, заданная указателем FileNamePtr и целое число, заданное параметром Line. Предполагается, что выводимые строка и число это имя файла и номер строки, содержащие данное обращение к функции eprintf, то есть, что обращение к eprintf имеет вид:
eprintf(__FILE__ , __LINE__ , format , . . . );














