V8 Трикове за отстраняване на грешки, Книга на знанието

Ключови думи: дебъгер, отстраняване на грешки, контрол, точка на прекъсване, стъпка

Тези, които поне веднъж са работили с дебъгера на VBA, мечтаят, че в 1C би било възможно да се променят стойностите на променливите и да се премине към която и да е точка в кода.

Не обещавам всичко, но някои възможности са налични чрез козметични интервенции в конфигурацията.

Функция за дистанционно управление

Тази функция позволява по всяко време да изпълнява произволен код на езика 1С над всички данни, прехвърлени към него.

Примери:
= Разказва малко текст

= Задава променливата Failure на true

= Не можете да извикате процедура в дебъгера, но можете да го направите чрез дистанционното управление:

Присвояване на функция

Всички знаят, че в 1C80 не можете да променяте стойностите на променливите, докато отстранявате грешки.
Изход обаче има!
В общ модул декларирайте функция:

Сега можете да присвоите стойност на променлива по всяко време.

Отстраняване на грешки в типична конфигурация

Но какво ще стане, ако имате отстраняване на грешки в конфигурацията, която няма тези страхотни функции?

Всичко е много просто. Създайте външна обработка, добавете тези функции с ключовата дума за експортиране към нейния модул и ги извикайте така:

Манипулация на стека.

За мен беше приятна изненада, когато открих, че е възможно да се гледат променливи на различни нива на стека.

Трябва да отворите прозореца на стека (Ctrl + F3), да отидете на необходимото ниво и да въведете името на променливата на дисплея.
Това се вижда най-добре с рекурсивна функция като пример:

Поставете точка на прекъсване в тази функция и ще видите, че променлива A приема различни стойности на различни нива на стека.

Прекъсване на програма

За съжаление в 1С 80 можете да спрете работата на някакъв код само като спрете работата само на 1С: Предприятие. Така да се каже, за да се борите с главоболие, трябва да отсечете главата си.:)
Но не е чак толкова лошо.

Използвайки функцията Присвояване, можете да присвоите стойност Неопределена или нула на всеки критичен обект на програмата и веднага щом програмата се опита да вземе подпорите или метода на този обект, ще възникне грешка и кодът ще спре да работи.
Например, вие сте в точката:

Веднага щом изпълнението на кода достигне реда с "Ако", ще възникне грешка и изпълнението ще спре.

Понякога при отстраняване на грешки на сложни функции не е известно дали има смисъл да се отстранява грешката на тази конкретна функция стъпка по стъпка или е по-добре да се изпълни, без да се влиза вътре за подробно отстраняване на грешки.

Променете кода в движение

Ако имате много код, изпълнен в оператора Execute, тогава е по-добре да поставите този код в някаква променлива, за да можете да промените този код от време на време. Ще ви разкажа случай от практиката.

Веднъж отстраних грешки в една обработка на обмен на данни - имаше много парчета код, изпълнени чрез Run. Ето нещастие - заредихме голям файл (многометров) и е толкова досадно, ако зареждането отнема час, а след това се срива при някаква незначителна грешка в кода, която не е била открита на етапа за отстраняване на грешки, винаги в най-неочаквана места.

Бяхме трудени и след това измислихме - всички повиквания за изпълнение бяха преместени в една функция, където бяха предадени кодът за изпълнение и параметрите. Това ни послужи добре.

Вмъкнахме Run в опит за изключение и ако възникне изключение, предложихме на програмиста да промени кода на живо. Ако се съгласи, се отваря диалогов прозорец за въвеждане на код, където той може да замени стария код с нов. И преди да изпълним кода, проверихме дали той е в списъка на заместващите. Ако е така, ние заменихме стария код с новия преди изпълнението. Ето как успяхме да заредим данните бързо.