Трассировка выполнения кода

Автор АЛьФ, 16 февраля 2024, 10:31

« назад - далее »

АЛьФ

Сейчас разрабатываю функционал трассировки кода.
Трассировка будет включаться методом Сервис::УровеньТрассировки(). В метод передается устанавливаемый уровень, имя файла, в который сохраняется трассировка и список отслеживаемых переменных.
Есть мысль сделать предопределенную функцию, в которую будет передаваться контекст исполнения, и которая будет возвращать дополнительную строку для лога.

Обсуждаем, дополняем.

Djelf

Неплохо бы еще добавить директиву препроцессора //TRACER ON, как это сделано в Tracer1C или как-то еще указывать что именно надо трассировать.
Это очень сильно уменьшает количество сообщений в трассировке.

АЛьФ

Цитата: Djelf от 16 февраля 2024, 11:47Неплохо бы еще добавить директиву препроцессора //TRACER ON, как это сделано в Tracer1C или как-то еще указывать что именно надо трассировать.
Это очень сильно уменьшает количество сообщений в трассировке.
Ну, идея ведь была в том, чтобы делать трассировку без какого-либо вмешивания в код. Т.е. включили трассировку, запустили обработку, посмотрели как прошло.
К тому же боюсь, что анализ кода в момент исполнения даст лишние тормоза. А предварительно модуль будет не проанализировать.

Djelf

#3
Может тогда Сервис::МодулиДляТрассировки(СписокМодулей)? Без указания модулей - все модули.

АЛьФ

А в каком тогда виде задавать список модулей?
Тогда уж надо делать ДобавитьМодульДляТрассировки и УдалитьМодульДляТрассировки.
Мда... Вырисовывается вынос этого функционала в отдельный объект. Сервис и так уже перегружен методами.

Djelf

Модуль Контур.Диадок для 7.7 смотрел? Там сильно заморочено трассировка сделана, но может на какие-то мысли наведет.
Если трассировать все, то ПриДвиженииМыши может весь лог спамом завалить...

Djelf

Цитата: АЛьФ от 16 февраля 2024, 12:24А в каком тогда виде задавать список модулей?
Тогда уж надо делать ДобавитьМодульДляТрассировки и УдалитьМодульДляТрассировки.
Мда... Вырисовывается вынос этого функционала в отдельный объект. Сервис и так уже перегружен методами.
В соответствии с ПриЗагрузкеМодуляФормы(<ИмяОбъекта>)

АЛьФ

Цитата: Djelf от 16 февраля 2024, 12:36Модуль Контур.Диадок для 7.7 смотрел? Там сильно заморочено трассировка сделана, но может на какие-то мысли наведет.
Как-то копал модуль Диадока, когда свою с ними интеграцию делал. Не помню уже что там по трассировки. Помню там у них уж больно все запутано было... Или это я с другими их путаю...

Цитата: Djelf от 16 февраля 2024, 12:36Если трассировать все, то ПриДвиженииМыши может весь лог спамом завалить...
Даже просто цикл в отчете с обращением к какой-нибудь глобальной функции форматирования засрет трассировку до полной невменяемости. Я потому раньше за это и не брался. А там же дальше пойдут идеи по вьюверу для этого лога.

Злоп

Или вот функции, которые выполняются при обновлении формы - их часто можно не логировать

Djelf

#9
Ой, ой, ой... Очень муторная работа видимо будет.
Список включаемых модулей, список исключаемых модулей, список включаемых Процедур/Функций, список исключаемых Процедур/Функций, может ну его нафиг?
Мы и так замерим, а ты что-то еще креативнее придумаешь!
З.Ы. заменил бинарным редактором в Tracer1C 1cpp.dll, на 2cpp.dll, это работает!
Требуется невероятно редко, как детектор крэша 1С на конкретной фазе выполнения.

АЛьФ

Не, ну прям вот в таком объеме я явно делать не буду. Логика применения трассировки - постепенное увеличение уровня, чтобы выйти на нужно место. В моем понимании.
В итоге на самом подробном уровне будет уже не очень большой текст в логе, т.к. место для лога по шагам локализовано.

Djelf

Поддерживаю. Слишком затратно

Arbuz

Цитата: Djelf от 16 февраля 2024, 15:18З.Ы. заменил бинарным редактором в Tracer1C 1cpp.dll, на 2cpp.dll, это работает!

Не понял, это зачем?

alyuev


Djelf

Оно не работало при загрузке после 1cpp.dll, так вот и вылечил, может версия такая, а может ветер был южный.