Довідковий матеріал

Елемент <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()/ПроверитьЦиклическиеСсылкиВстроенногоЯзыка(). Під час виклику цього методу перевіряється або змінна, вказана як параметр методу, або всі локальні змінні, доступні в момент виконання методу.

Записатися телефоном