V8 хитрості налагодження


Ключові слова: відладчик, налагодження, управління,
точка зупинки, покрокове виконання


Ті, хто хоч раз працював з отладчиком VBA, мріють про те,
щоб і в 1С можна було змінювати значення змінних і переходити на будь-яку точку коду.

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

функція ДУ

Ця функція дозволяє в будь-який момент виконати будь-який код на мові 1С над будь-якими даними, переданими їй.

приклади:
= Повідомляє якийсь текст

= Присваивает змінної Відмова значення істина

= В отладчике можна викликати процедуру, але можна це зробити через ДУ:

функція Присвоїти

Всім відомо, що в 1С80 можна по піхоту налагодження міняти значення змінних.
Однак є вихід!
Загалом модулі оголосіть функцію:

Тепер ви можете в будь-який момент привласнити значення змінної.

Налагодження в типовій конфігурації

А що ж робити, якщо вам дісталася налагодження конфігурації, в якій немає цих чудових функцій?

Все дуже просто. Створіть зовнішню обробку, занесіть в її модуль ці функції з ключовим словом експорт і викликайте їх наприклад так:

Маніпуляції зі стеком.

Для мене було приємною несподіванкою, коли я виявив, що можна дивитися змінні на різних рівнях стека.

Потрібно відкрити вікно стека (Ctrl + F3), перейти на потрібні рівень і ввести в табло ім'я змінної.
Найкраще це розглянути на прикладі рекурсивної функції:


Поставте в цій функцію точку зупину і ви побачите що на різних рівнях стека змінна А приймає різні значення.

Переривання роботи програми

На жаль, в 1С 80 можна припинити роботу деякого коду тільки припинивши
роботу всього 1С: Підприємства. Так би мовити, для боротьби з головним болем потрібно відрубати голову.

Але не все так погано.

За допомогою функції Присвоїти ви можете привласнити якомусь критичному об'єкту програми значення Не визначено або нуль і як тільки програма спробує отримати реквізит або метод цього об'єкта виникне помилка і робота коду припиниться.
Наприклад ви перебуваєте в точці:


Тепер, як тільки виконання коду дійде до рядка з "Якщо", виникне помилка і виконання припиниться.

Іноді при налагодженні сложновложенних функцій невідомо, чи має сенс налагоджувати дану
конкретну функцію по кроках, або краще виконати її не заходячи всередину для детальної налагодження.

Зміна коду на льоту

Якщо у вас багато коду виконується в операторі Виконати, то краще цей код занести в деяку змінну, щоб при нагоді можна було змінити цей код. Розповім випадок з практики.

Налагоджував я якось одну обробку з обміну даними - там було багато шматків коду, що виконуються через Виконати. От біда трапилася - завантажували ми великий файл (багатометровий) і так прикро, якщо вантажиться він годину, а потім вилітає на який-небудь дрібної помилку в коді, яка була не виявлено на етапі налагодження, завжди в найнесподіваніших місцях.

Мучилися ми мучилися, а потім придумали - все виклики Виконати були винесені в одну функцію, куди передавався код для виконання і параметри. Це нам і співслужило хорошу службу.

Ми вставили Виконати в Спроба-Виняток і якщо відбувалося виключення, пропонували програмісту наживо змінити код. Якщо він погоджувався, відкривався діалог введення коду, де він міг замінити старий код на новий. І перед виконання коду ми перевіряли, чи є він у списку замін. Якщо є, то ми перед виконанням підміняли старий код на новий. Так нам вдалося швидко завантажити дані.

Налагодження на сервері

Щоб зекономити вам нерви, повідомляю, що налагоджувати код, який виконується на сервері (в трехзвенке), неможливо. Тому якщо у вас програма в файловому варіанті зупиняється на точці зупинки, а в серверному - ні, не лякайтеся, так і задумано. Адже код виконується на сервері додатків і не може тому регламентуватиме на клієнті.

Умовна точка зупинки

Не всі знають, що в 1С 80 є умовна точка зупинки - точка зупинки по умові. Однак це дуже корисний механізм.

трасування

Іноді виникає необхідність в трасуванні коду програми - тобто у видачі в віконце повідомлень значень змінних на кожному проході через точку коду.

Для цих цілей в 1С можна використовувати умовну точку зупину, тому що умова перевіряється на кожному проході коду через умовну точку зупину.


На зазначеному рядку ставимо точку зупину з умовою:


Тепер при налагодженні програми у віконці повідомлення трасується виконання коду:

Сума: 1
Сума: 3
Сума: 6
Сума: 10
Сума: 15
Сума: 21
Сума: 28
Сума: 36
Сума: 45
Сума: 55

Природно, можна використовувати умови і виводити не всі повідомлення, а тільки при цікавлять нас значеннях змінних:


Метод зручний тим, що не потрібно вносити зміни в конфігурацію.
Зручно ловити помилки, коли 1С "вилітає", якщо записувати повідомлення в файл.

Використання коду


Припустимо у нас є такий код:

У такому випадку ми можемо застосовувати програмне керування кодом.
На початку оператора Якщо ставимо умовну точку зупину:

Тобто якщо А = 1 то ми присвоюємо А значення 2, і присвоюємо 1 в протилежному випадку.
Це дозволяє, не змінюючи конфігурацію, постійно перенаправляти код на потрібну нам гілку.
Можна просто поставити умовну точку зупину, яка буде привласнювати А потрібне значення:

осяжна трасування

Якщо ви вставляєте в код багато функцій Повідомити для трасування ходу виконання програми, то потім часом буває проблематично знайти всі такі трасувальні виклики.

Пропоную оформляти такі виклики так, щоб перед викликом повідомлення стояла крапка з комою:


Якщо трасування тимчасово не потрібна, її треба прибрати так:


Тоді всі активні трасування можна знайти по рядку "; Повідомити", а всі неактивні - по рядку "//; Повідомити".

Інтерфейс для налагодження


Чесно кажучи, коли мені набридло постійно після перезапуску 1С заходити через Операції-Документи в список потрібних мені документів, я створив собі інтерфейс "Отладчик" і в його меню встромив потрібні мені команди. Тепер після перезапуску я опинявся в потрібному мені журналі / формі з одного кліка.

Інший варіант - створити собі цілий оцінний десктоп - тобто відразу відкрити всі потрібні форми і документи. Для цього найкраще створити зовнішню обробку, назвати її наприклад "Відкривачка" і в формі цієї обробки написати, що потрібно відкривати:

Тепер досить відкрити цю зовнішню обробку і десктоп налаштуватися. Наступного разу ця обробка вже буде в списку недавно відкритих файлів.

Простіший варіант для ледачих - в табло написати обчислення виразів (наприклад за допомогою дистанційного керування), які відкриють потрібні документи і журнали. Легко і швидко!

Налагодження клієнт-серверної бази


Відомо, що код на сервер не налагоджували.
Тому варіанти налагодження:
1. Трасування (вставка діагностичних повідомлень).
2. вивантажити базу в файлову копію і там налагоджувати.
3. Поставити галочку "Клієнт" на вас цікавить модулі і налагоджувати. Потім повернути галочку назад.
Примітка: В 1С v 8.1 з'явилася можливість налагоджувати код на сервері. Для цього сервер потрібно запустити в режимі налагодження, можна з командного рядка: ragent.exe / debug

Використання зовнішньої обробки


Часто, коли код бази міняти не можна, а погратися хочеться або коли код виконується на сервері і немає можливості його налагодити, допомагає використання зовнішньої обробки.
Для цього потрібно скопіювати код в зовнішнє обробку і поотлажівать вже зовнішню обробку, по ходу змінюючи код і переглядаючи змінні.

Підсовування тестових даних


Іноді в базі складно отримати приклад, при якому виконується якесь екзотичне умова.
В такому випадку простіше підсунути тестові дані.
Наприклад, якщо в коді обробляється деяка таблиця значень, можна прямо в коді прописати очищення цієї таблиці значень і заповнення її новими даними, при яких виконується ця екзотична умова.
Для тих, хто не любить псувати код заради налагодження, можна порадити за допомогою функції ДУ викликати зовнішню обробку, яка заповнить таблицю значень як нам треба (наприклад вважає її з макета).

налагодження блокувань


Іноді потрібно подивитися, як поводяться два паралельні процеси.
Найпростіший спосіб налагодження таких ситуацій - вставити в коді виклик процедури Попередження ().
Наприклад, в подію ПріЗапісі об'єкта вставляємо виклик Попередження ( "Йде запис об'єкта.").
Тоді якщо відкрити іншу сесію і спробувати записати об'єкт, видасться попередження, що об'єкт заблокований.

Якщо така налагодження викликається часто, рекомендую такий спосіб виклику одразу двох сесій 1С.
З відладчика натискаєте F5 (Запустити налагодження), запускається 1С: Підприємство. Відключаєтеся від налагодження цього 1С Підприємства - "Налагодження" -> "Кінець сеансу", потім ще раз натискаєте Ф5. У підсумку друга сесія у вас підключена до отладчику. Запускаєте код з попередженням в першій сесії і налагоджувати в другій.

прискорення налагодження


Отладчик знижує швидкість роботи програми.
Тому можна вчинити так - відключити відладчик, а в потрібному місці вивести Попередження ();
Коли виведеться попередження, можна знову підключити відладчик, поставити крапку зупинки і почати налагодження.

V8 хитрості налагодження

Схожі статті