Элемент <scriptcircrefs>
Описан элемент <scriptcircrefs> в файле logcfg.xml для фиксации циклических ссылок в технологическом журнале, а также способы их поиска в клиентском и серверном коде BAS.. Вывод информации о циклических ссылках
Вывод информации о циклических ссылках
Элемент <scriptcircrefs> включает сбор в технологическом журнале информации о циклических ссылках. Если элемент отсутствует в файле, информация о циклических ссылках в технологический журнал не включается.
<?xml version="1.0"?>
<config xmlns="http://bas-soft.eu/v8/tech-log">
<log location="C:\bas\logs" history="96">
<event>
<eq property="name" value="SCRIPTCIRCREFS"/>
</event>
<event>
<eq property="name" value="Excp"/>
</event>
<property name="all"/>
</log>
<scriptcircrefs/>
</config>
Приведённый пример настраивает:
- сбор информации о циклических ссылках (элемент <scriptcircrefs/>);
- помещение в технологический журнал событий со всеми свойствами (элемент <property name="all"/>);
- запись в технологический журнал только событий SCRIPTCIRCREFS и EXCP (элементы <event>).
Вывод информации о циклических ссылках
При разработке сложных прикладных решений возможно внесение различных ошибок, приводящих к циклическим ссылкам. Циклические ссылки — это такое построение данных в программе, при котором какие-либо данные прямо или косвенно ссылаются сами на себя. Простейший пример такой циклической ссылки:
Структура1 = Новый Структура("СсылкаНаСтруктуру2");
Структура2 = Новый Структура("СсылкаНаСтруктуру1");
Структура1.СсылкаНаСтруктуру2 = Структура2;
Структура2.СсылкаНаСтруктуру1 = Структура1;
Память, занятая такими данными, не может быть освобождена системой после завершения работы, например, формы, содержащей такой программный код на встроенном языке. В результате каждое открытие формы с таким кодом приводит к тому, что процесс, обслуживающий сеанс прикладного решения, начинает занимать оперативную память, но не освобождает её после использования. Следствием этого является либо аварийное завершение работы прикладного решения, либо резкое увеличение объёма оперативной памяти, используемой программой. Повышенное использование оперативной памяти программой может, в частности, приводить к общему замедлению работы компьютера, невозможности открыть внешнюю обработку после внесения изменений и т. п.
Очевидно, что с циклическими ссылками следует бороться. Для локализации ошибок в конфигурациях, которые приводят к построению данных с циклическими ссылками, предусмотрено несколько инструментов:
1. Настройка файла конфигурации технологического журнала.
2. Использование командной строки запуска клиентской или серверной программы.
3. Использование параметра файла conf.cfg.
4. Использование метода встроенного языка.
ВНИМАНИЕ!
Использование любого из этих инструментов приводит к существенному снижению производительности системы. Не следует использовать инструменты обнаружения циклических ссылок в обычном режиме работы системы. Режим обнаружения циклических ссылок целесообразно включать только при целенаправленном поиске циклических ссылок для исправления соответствующих фрагментов прикладного решения.
В зависимости от выбранного режима поведение системы при обнаружении циклических ссылок будет различным:
- При использовании технологического журнала в технологический журнал будут помещены события SCRIPTCIRCREFS. При этом выполнение прикладного решения не будет прерываться.
- При использовании других инструментов работа прикладного решения будет прервана с выдачей соответствующего сообщения. Продолжить работу после появления сообщения невозможно.
Проверка циклических ссылок выполняется:
- при завершении метода встроенного языка: анализируются все локальные переменные метода и его параметры;
- при установке параметра сеанса: анализируется значение, устанавливаемое в качестве значения параметра сеанса;
- в местах вызова специального метода встроенного языка.
Чтобы включить в технологический журнал информацию о циклических ссылках, необходимо указать в файле настройки технологического журнала logcfg.xml элемент <scriptcircrefs>. Тогда система начнёт выполнять анализ циклических ссылок. Наличие или отсутствие в технологическом журнале событий SCRIPTCIRCREFS зависит от других параметров технологического журнала.
Если при запуске тонкого или толстого клиента используется параметр командной строки запуска /EnableCheckScriptCircularRefs, это означает, что система будет выполнять поиск циклических ссылок в клиентском коде прикладного решения. Этот параметр также добавляется в командную строку запуска клиентской программы, если в настройках конфигуратора установлен флажок Проверка циклических ссылок встроенного языка (меню Сервис – Параметры – Запуск BAF – Дополнительные).
Чтобы включить поиск циклических ссылок на стороне сервера системы, следует запустить его с параметром /enableCheckScriptCircularRefs. Тогда поиск циклических ссылок будет выполняться во всех сеансах, обслуживаемых сервером, запущенным с указанным параметром.
Если в файле conf.cfg параметр EnableCheckScriptCircularRefs установлен в значение true, это означает, что поиск циклических ссылок при выполнении кода на встроенном языке будет осуществляться всеми экземплярами системы, использующими файл conf.cfg с установленным параметром.
Инициировать поиск циклических ссылок можно с помощью метода глобального контекста CheckScriptCircularRefs()/ПроверитьЦиклическиеСсылкиВстроенногоЯзыка(). При вызове этого метода проверяется либо переменная, указанная в качестве параметра метода, либо все локальные переменные, доступные в момент выполнения метода.