rtsDDr (1158447), страница 5
Текст из файла (страница 5)
Кроме того, функция eprintf выводит координаты точки программы пользователя, из которой произошло последнее обращение к системе поддержки (имя файла и номер строки).
| void epprintf ( | int | prefix, |
Функция аналогична рассмотренной выше функции eprintf , но при нулевом значении параметра prefix вывод информации в потоки, предназначенные для сообщений об ошибках, осуществляет только главный процессор (см. п.4). Номер текущего процессора в этом случае не выводится.
8О выводе информационных сообщений системы поддержки и сообщений об ошибках
8.1Функции вывода информационных сообщений и сообщений об ошибках
Каждое сообщение, выдаваемое системой поддержки в процессе своего функционирования, является либо информационным, либо сообщением об ошибке.
Информационные сообщения выводятся с помощью функций rtl_printf, rtl_mprintf (см.п.1.3), а также функцией pprintf со значением параметра prefix, равным 0 или 1 (см.п.7.3).
Кроме того, для вывода информационных сообщений в системе поддержки предусмотрена функция rtl_iprintf, синтаксически эквивалентная функции printf и возвращающая число выведенных символов:
int rtl_iprintf(char *format, . . . );
Информационным сообщением считается также любая трассировочная информация, выводимая функциями tprintf и dvm_trace в поток информационных сообщений системы поддержки (см. п.7.3).
Вывод сообщений об ошибках осуществляется функциями eprintf и epprintf, а также функцией pprintf со значением параметра prefix, равным 2 или 3 (см.п.7.3).
8.2Управление стандартными выходными потоками и потоками вывода информационных сообщений и сообщений об ошибках
Направление и перенаправление стандартных выходных потоков, а также потоков, предназначенных для вывода информационных сообщений и сообщений об ошибках, осуществляется с помощью параметров, содержащихся в файлах current.par и syspar.* .
Файл current.par является файлом параметров текущего запуска системы поддержки и создаётся программой её запуска в текущей рабочей директории. Он состоит из следующей последовательности строк:
CurrentPar[0] = <параметр>;
CurrentPar[1] = <параметр>;
. . . . . . . . . . . . . . . . . . . . . . . .
CurrentPar[n] = <параметр>;
Расположенными справа от знака "=" параметрами, определяющими вывод информации, могут быть:
-
+o[<путь, определяющий файл>]
Данный параметр даёт указание системе поддержки перевести поток stdout в заданный файл. Если путь, определяющий файл, не задан, то stdout переводится в файл stdout.out .
-
+e[<путь, определяющий файл>]
Параметр задаёт перевод потока stderr в заданный файл. Если путь, определяющий файл, не задан, то stderr переводится в файл stderr.out.
-
+i[<символы, определяющие потоки>]
Данный параметр даёт указание системе поддержки направить информационные сообщения в потоки, определяемые заданными символами.
Символами, определяющими потоки, могут быть:
"o" поток stdout;
"e" поток stderr;
"f" файл.
Если задан как символ "o", так и символ "e", а потоки stdout и stderr в файлы не переведены или переведены в один файл, то вывод информационных сообщений будет осуществляться только в поток stdout (информационные сообщения не дублируются). При направлении информационных сообщений в файл (задан символ "f") его имя (путь) определяется параметром SysInfoFileName файла параметров syspar.* (см. ниже). Если не задано ни одного символа, то информационные сообщения выводиться не будут.
Перенаправление потоков stdout и stderr в файлы может быть осуществлено также с помощью следующих параметров, задаваемых в файле syspar.*:
| StdOutToFile | | признак перевода потока stdout в файл; |
| StdOutFileName | | путь, определяющий файл для перевода в него потока stdout (если этот параметр не задан или задан пустой путь, то перенаправление потока stdout, если оно указано параметром StdOutToFile, будет произведено в файл stdout.out); |
| StdErrToFile | | признак перевода потока stderr в файл; |
| StdErrFileName | | путь, определяющий файл для перевода в него потока stderr (если этот параметр не задан или задан пустой путь, то перенаправление потока stderr, если оно указано параметром StdErrToFile, будет произведено в файл stderr.out); |
| DelStdStream | | признак уничтожения "старых" (оставшихся от предыдущего запуска) файлов с выходными потоками. |
При вводе и обработке параметров наибольший приоритет имеет самое первое указание о переводе в файл стандартного выходного потока. В частности, перенаправление потоков stdout и stderr с помощью параметров "+o" и "+e" файла current.par подавляет перевод потоков перечисленными выше параметрами файла syspar.* (файл current.par вводится и обрабатывается раньше файла syspar.*).
При отсутствии указания "+i" в файле current.par вывод информационных сообщений определяется параметрами, заданными в файле syspar.* .
Такими параметрами могут быть:
| SysInfoPrint | | общий признак включённого вывода информационных сообщений; |
| SysInfoStdOut | | признак вывода информационных сообщений в поток stdout; |
| SysInfoStdErr | | признак вывода информационных сообщений в поток stderr; |
| SysInfoFile | | признак вывода информационных сообщений в файл. |
Единичные значения параметров SysInfoStdOut и SysInfoStdErr позволяют при перенаправлении stdout в файл перенаправить информационные сообщения в этот же файл и сохранить их на экране видеомонитора (перевод вывода пользовательской программы в файл должен быть осуществлён с помощью параметра "+o" файла current.par). Манипулируя значениями этих параметров, можно добиться любой комбинации ВИДЕОМОНИТОР STDOUT, ПЕРЕВЕДЕННЫЙ В ФАЙЛ. Если параметры SysInfoStdOut и SysInfoStdErr равны единице, а потоки stdout и stderr в файлы не переведены или переведены в один файл, то вывод информационных сообщений будет осуществляться только в поток stdout (вывод информации не дублируется).
Отметим, что направление информационных сообщений с помощью параметра "+i" файла current.par имеет приоритет над их направлением, заданным параметрами SysInfoStdOut, SysInfoStdErr и SysInfoFile файла syspar.* .
Вывод информационных сообщений в файл (SysInfoFile = 1) управляется также следующими параметрами файла syspar.*:
| SysInfoFileName | | путь, определяющий файл для размещения информационных сообщений; |
| FatInfoNoOpen | | признак завершения работы при неудачном открытии файла для информационных сообщений; |
| SysInfoSepFile | | признак накопления информационных сообщений в отдельном для каждого процессора файле; |
| DelSysInfo | | признак уничтожения "старого" (оставшегося от предыдущего запуска) файла с информационными сообщениями. |
При нулевом значении параметра FatInfoNoOpen неудачное открытие файла для информационных сообщений приведёт к выводу предупреждения в поток сообщений об ошибках и продолжению выполнения программы без вывода информационных сообщений в файл.
При нулевом значении SysInfoSepFile каждый процессор направляет информационные сообщения непосредственно в файл, заданный параметром SysInfoFileName. При единичном каждый процессор накапливает информационные сообщения в своем временном файле, имеющем имя <внутренний номер процессора>.out. Перед завершением работы все временные файлы собираются в один (определённый параметром SysInfoFileName), а затем уничтожаются.
Все сообщения об ошибках:
-
выводятся в поток stderr, если потоки stdout и stderr не перенаправлены в один и тот же файл;
-
выводятся в поток stdout, если вывод задачи пользователя или поток stderr перенаправлены в файлы;
-
выводятся в файл, заданный параметром SysInfoFileName, если параметр SysInfoFile равен единице (в тот же файл, что и информационные сообщения).
Поэтому сообщения об ошибках:
-
всегда сопровождают вывод пользовательской задачи;
-
всегда поступают на видеомонитор (если потоки stdout и stderr одновременно не переведены в файлы).
ЗАМЕЧАНИЕ 1. Вывод информационных сообщений до ввода значения параметра SysInfoPrint определяется состоянием общего признака вывода информационных сообщений в момент старта программы (до инициализации системы поддержки). Ненулевое начальное значение этого признака устанавливается в том случае, если система поддержки скомпилирована с предопределённой переменной компиляции _INIT_INFO_ . В противном случае информационные сообщения до ввода параметра SysInfoPrint не выводятся.
ЗАМЕЧАНИЕ 2. Стандартно вывод информационных сообщений осуществляется следующим образом. До ввода параметров информационные сообщения направлены в поток stdout. Если после ввода параметров SysInfoStdOut и SysInfoStdErr окажется, что первый из них равен нулю, а второй – нет, то информационные сообщения будут перенаправлены в поток stderr. Если же оба параметра будут введены ненулевыми, а потоки stdout и stderr направлены на видеомонитор или связаны с одним и тем же файлом, то вывод информационных сообщений будет продолжен только в поток stdout.
В качестве альтернативы предусматривается вывод информационных сообщений с приоритетом потока stderr. Для этого компиляция системы поддержки должна быть произведена с определённой переменной компиляции _INFO_STDERR_ . В результате поток stderr будет играть такую же роль, что и поток stdout в рассмотренной выше стандартной схеме.
ЗАМЕЧАНИЕ 3. Если задан вывод информационных сообщений в файл и в поток stdout (stderr), а поток stdout (stderr) переведён в этот же файл, то вывод информационных сообщений в файл блокируется (параметр SysInfoFile устанавливается равным нулю).
8.3Классы информационных сообщений и управление их выводом
Все информационные сообщения разделены на непересекающиеся классы, каждый из которых связан с функционированием определённой компоненты системы поддержки. Вывод сообщений каждого класса управляется независимо с помощью перечисленных ниже параметров, содержащихся в файлах syspar.*, statist.*, systrace.* и usrdebug.* . По умолчанию считается, что параметр задаётся в файлах syspar.* .
-
VersStartPrint – признак вывода номера версии системы поддержки перед началом работы программы.
-
VersFullStartPrint – признак вывода номера версии системы поддержки и номеров версий всех файлов параметров перед началом работы программы.
-
VersFinishPrint – признак вывода номера версии системы поддержки после окончания работы программы.
-
VersFullFinishPrint – признак вывода номера версии системы поддержки и номеров версий всех файлов параметров после окончания работы программы.
-
SysParPrint – признак вывода параметров инициализации системы поддержки перед началом работы программы.
-
ProcListPrint – признак вывода таблицы процессоров перед началом работы программы. Для каждого процессора выводится его внутренний и внешний номера и идентификатор.
-
WeightListPrint – признак вывода весов координат процессоров перед началом работы программы.
-
ParamRunPrint – признак вывода информации о параметрах и режимах запуска системы поддержки перед началом работы программы (стандартный или нестандартный запуск, тип базовой системы передачи сообщений и т. д.).
-
EndProgMemoryPrint – признак вывода информации о неосвобожденной памяти при завершении работы.
-
EndProgObjectPrint – признак вывода информации о неуничтоженных статических DVM-объектах при завершении работы.
-
EndProgCheckSumPrint – признак вывода информации о состоянии контролируемых областей памяти при завершении работы.
-
InputParPrint – признак вывода сообщений о начале ввода каждого файла параметров.
-
EndReadParPrint – признак вывода сообщений о завершении ввода каждого файла параметров.
-
TimeExpendPrint режим вывода информации о расходе времени программой. При нулевом значении данного параметра информация о расходе времени не выводится. Единичное значение задаёт краткий режим вывода информации о расходе времени, большее единицы (2,3,4,5) – подробный. Параметр задаётся в файлах statist.*.
-
CallCountPrint – признак вывода статистики обращений к функциям системы подддержки, доступным программе пользователя (для каждой функции сообщается число обращений к ней). Параметр задаётся в файлах statist.*. При единичном значении CallCountPrint выводится информация только о функциях, к которым было хотя бы одно обращение, а при значении, равном 2 – обо всех функциях.
-
TraceClosePrint – признак вывода сообщений о завершении выгрузки каждого буфера с накопленной системной трассировкой в файл (при трассировке в буфер оперативной памяти). Параметр задаётся в файлах systrace.*.
-
DbgInfoPrint – признак вывода информационных сообщений подсистемы динамического контроля и трассировки вычислений. Параметр задаётся в файлах usrdebug.* .
Сообщения любого класса выводятся только в том случае, если задан общий признак вывода информационных сообщений (с помощью рассмотренного в п.8.2 параметра SysInfoPrint).
9Измерение времени выполнения участков пользовательской программы
Кроме основных средств анализа производительности и сбора необходимой для этого информации, система поддержки предоставляет вспомогательный механизм измерения времени выполнения участков программы пользователя, при использовании которого результаты измерений выводятся в потоки системной трассировки. Для обозначения начала и конца измеряемого участка используются макровызовы MeasureStart и MeasureFinish. Измеряемые участки могут быть вложенными:
| MeasureStart; /* начало участка 1 */ | ||
| MeasureStart; /* начало участка 2 */ | ||
| MeasureStart; /* начало участка N / | ||
| ........................................... | ||
| MeasureFinish; /* конец участка 2 */ | ||
| MeasureFinish; /* конец участка 1 */ | ||
Макровызов MeasureStart эквивалентен обращению к функции dvm_trace (см.п.7.3) с номером события 1 (имя этого события MeasureStart), а макровызов MeasureFinish обращению к dvm_trace с номером события 2 (имя этого события MeasureFinish). В качестве дополнительной информации в открытые потоки трассировки для макровызова MeasureStart выводится уровень вложенности измеряемого участка (1,2, ..., N в вышеприведенной схеме), а для макровызова MeasureFinish уровень вложенности и время выполнения программы, прошедшее с момента макровызова MeasureStart с тем же уровнем вложенности.














