V8 Трикове за отстраняване на грешки, Книга на знанието
Ключови думи: дебъгер, отстраняване на грешки, контрол, точка на прекъсване, стъпка
Тези, които поне веднъж са работили с дебъгера на VBA, мечтаят, че в 1C би било възможно да се променят стойностите на променливите и да се премине към която и да е точка в кода.
Не обещавам всичко, но някои възможности са налични чрез козметични интервенции в конфигурацията.
Функция за дистанционно управление
Тази функция позволява по всяко време да изпълнява произволен код на езика 1С над всички данни, прехвърлени към него.
Примери:
= Разказва малко текст
= Задава променливата Failure на true
= Не можете да извикате процедура в дебъгера, но можете да го направите чрез дистанционното управление:
Присвояване на функция
Всички знаят, че в 1C80 не можете да променяте стойностите на променливите, докато отстранявате грешки.
Изход обаче има!
В общ модул декларирайте функция:
Сега можете да присвоите стойност на променлива по всяко време.
Отстраняване на грешки в типична конфигурация
Но какво ще стане, ако имате отстраняване на грешки в конфигурацията, която няма тези страхотни функции?
Всичко е много просто. Създайте външна обработка, добавете тези функции с ключовата дума за експортиране към нейния модул и ги извикайте така:
Манипулация на стека.
За мен беше приятна изненада, когато открих, че е възможно да се гледат променливи на различни нива на стека.
Трябва да отворите прозореца на стека (Ctrl + F3), да отидете на необходимото ниво и да въведете името на променливата на дисплея.
Това се вижда най-добре с рекурсивна функция като пример:
Поставете точка на прекъсване в тази функция и ще видите, че променлива A приема различни стойности на различни нива на стека.
Прекъсване на програма
За съжаление в 1С 80 можете да спрете работата на някакъв код само като спрете работата само на 1С: Предприятие. Така да се каже, за да се борите с главоболие, трябва да отсечете главата си.:)
Но не е чак толкова лошо.
Използвайки функцията Присвояване, можете да присвоите стойност Неопределена или нула на всеки критичен обект на програмата и веднага щом програмата се опита да вземе подпорите или метода на този обект, ще възникне грешка и кодът ще спре да работи.
Например, вие сте в точката:
Веднага щом изпълнението на кода достигне реда с "Ако", ще възникне грешка и изпълнението ще спре.
Понякога при отстраняване на грешки на сложни функции не е известно дали има смисъл да се отстранява грешката на тази конкретна функция стъпка по стъпка или е по-добре да се изпълни, без да се влиза вътре за подробно отстраняване на грешки.
Променете кода в движение
Ако имате много код, изпълнен в оператора Execute, тогава е по-добре да поставите този код в някаква променлива, за да можете да промените този код от време на време. Ще ви разкажа случай от практиката.
Веднъж отстраних грешки в една обработка на обмен на данни - имаше много парчета код, изпълнени чрез Run. Ето нещастие - заредихме голям файл (многометров) и е толкова досадно, ако зареждането отнема час, а след това се срива при някаква незначителна грешка в кода, която не е била открита на етапа за отстраняване на грешки, винаги в най-неочаквана места.
Бяхме трудени и след това измислихме - всички повиквания за изпълнение бяха преместени в една функция, където бяха предадени кодът за изпълнение и параметрите. Това ни послужи добре.
Вмъкнахме Run в опит за изключение и ако възникне изключение, предложихме на програмиста да промени кода на живо. Ако се съгласи, се отваря диалогов прозорец за въвеждане на код, където той може да замени стария код с нов. И преди да изпълним кода, проверихме дали той е в списъка на заместващите. Ако е така, ние заменихме стария код с новия преди изпълнението. Ето как успяхме да заредим данните бързо.