gifts2017

Трассировка кода V8

Опубликовал Роман Романов (romansun) в раздел Программирование - Практика программирования

Трассировка запусков процедур и функций V8

Некоторое время назад возникла необходимость окинуть с высоты птичьего полёта БП3.0.

Прежде всего какие модули когда и как задействуются.

 

Немного цифр к размышлению.

Количество задействованных модулей при проведении ПТУ:

БП2.0 - 21 шт.

БП3.0 - 122 шт.

Уровней вложенности запускаемых процедур или функций при проведении ПТУ:

БП2.0 - 6

БП3.0 - 12

Думаю, ни для кого не секрет, что сложность, как платформы, так и типовых решений растёт очень быстро. Поэтому начинают требоваться инструменты для анализа конфигурации в целом на архитектурном уровне.

Что есть эта публикация. Это простой и немудрёный способ оттрейсить запускаемые процедуры через вписку во все процедуры и функции соответственно. Результат вызовов скидывается в иерархический справочник в правильном порядке. Через простой запрос на выходе мы получаем корректное дерево вызовов.

Нет никаких ВК. Т.е. нет проблем с операционкой, памятью, совместимостью и прочим.  Только 1С, только хардкор :) Регулярок тож, кстати, нет. Хотя были первоначальные варианты с ними.

  

В архиве лежат:

- файл mxl - это пример конечного результата. Дерево вызовов процедур и функций при проведении ПТУ. Обычные формы.

- обработка для конвертации файлов текстов модулей. 

- файлы клипборда - это файлы-копии буфера обмена в которые сохранены метаданные, которые необходимо вставить в соответствующие ветки конфигурации.

- сама программа clipbrd.exe, для тех, кто работает в Vista и Win7. Для XP - она лежит в /system32

--- 

Инструкция к применению:

1. Выгружаем всю конфу - меню "Конфигурация/Выгрузить файлы конфигурации.."

2. Через замер производительности определяем только те модули, которые нам интересны. Например, модули проведения ПТУ. Во всей БП3.0 2982 файла модулей, поэтому все их курочить - это долго и бессмысленно.

3. Копируем в отдельную папку нужные модули и называем её "Образец"

4. Копируем папку "Образец" в папку "Образец - копия". Именно файлы этой папки будет менять.

5. Открываем обработку. Для любопытства и теста можно сперва просто поконвертить файлы не записывая. Для режима записи ставим галку "Записывать".

6. Сконвертированные файлы заливаем обратно в конфу  "Конфигурация/Загрузить файлы конфигурации.." 

7. Вставляем через буфер обмена и программу clipbrd.exe нужные метаданные.

 

8. Грустный пункт! В некоторых процедурах и функциях программисты не ставили последнюю ";". Обработка не проставляет их, к сожалению. Если кто докодит - пожалуйста. Т.е. все такие ";" нужно будет ставить руками. По опыту, на проведении ПТУ потребовалось примерно 10 запусков, чтобы полностью отладить эти места.

 

9. После удачного запуска работаем через справочник "Трассировка".

В нем в панели есть две кнопки "Очистить все" - очищаем сам справочник и обнуляет константу "НомерТрассировки" (уровень трассировки) и кнопка "Включить трассировку" - включает/выключает режим трассировки и записи результата в справочник.

По результам работы получаем записанное дерево. Можно писать запросы :)

 

--- 

Что хотелось бы отметить отдельно:

1. Это работает небыстро. Запись, очистка и т.п. - всё это работает весьма небыстро. Задачи сделать красиво, быстро и круто - не было. Реализована прежде всего задача получения дерево вызовов модулей, процедур и функций.

2. Для обычного приложения. В УФ вроде тоже работает, но особо не тестил. 

3. Это не коммерческая версия. Т.е. as is, никаких гарантий :). Не могу сказать, что я сам её активно использую. И буду ли вообще использовать постоянно. Можно считать это просто информацией к размышлению.

4. Для чего это вообще? Например:

- подобная аналитика нужна, когда есть необходимость плотно вписаться в существующую незнакомую конфу. Вплоть до своего решения на основе типовой

- для анализа узких мест своих процессов. К примеру, излишних вызовов одних и тех же штук в разных местах по сто раз.

- для стандартизации процессов (проведения документов, к примеру и т.п.).

и т.п.

5. Кто захочет докодить, накодить, перекодить. 1С-ом, через ВК, через регулярные выражения - буду рад! Кто захочет прикрутить визуализацию - пожалуйста! Вообще, буду рад любому развитию темы.

 

тема форума http://forum.infostart.ru/forum26/topic47900

от О-Планет для 7.7 http://infostart.ru/public/16676/

Скачать файлы

Наименование Файл Версия Размер
traceV8.zip 71
.zip 90,17Kb
04.12.12
71
.zip 90,17Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Сергей Старых (tormozit) 05.12.12 01:34
Если запись выполняется сразу (в реальном времени), то это должно ОЧЕНЬ сильно замедлять работу программы. Думаю замедление будет зачастую такое, что никто даже не захочет этим пользоваться. Поэтому если сделано именно так, то рекомендую все таки рассмотреть вариант без записи в бд, а просто строить дерево в памяти.
2. Андрей Акулов (DrAku1a) 05.12.12 02:35
А стандартный механизм трассировки от 1С чем плох то?
3. Валерий Шмендюк (VNSh) 05.12.12 05:40
Спасибо, может очень пригодиться.
В ссылке на тему форума нужен завершающий слэш, иначе она не работает.
romansun; +1 Ответить
4. Владимир Кузнецов (mr.Kot) 05.12.12 07:02
Грусно как-то от того, что усложняется БП от версии к версии.
5. Борис Моренко (BorisMor) 05.12.12 07:08
(2) DrAku1a, а под стандартными вы что подразумеваете ?
Мне вообще грустно, что нет в 1С нормальной системы логрования (с разбиением сообщений на типы, указанием временем, запись в отдельную базу). На C# пользуюсь библиотекой NLog – любо дорого.

ps
Вот моя поделка по этой же теме
http://infostart.ru/public/127171/
6. Владимир Чаклин (vec435) 05.12.12 09:29
если построить дерево вызовов только на основе выгруженных модулей то это сократит время при отладке
Прикрепленные файлы:
7. Владимир Чаклин (vec435) 05.12.12 09:58
8. Андрей Акулов (DrAku1a) 05.12.12 10:18
9. Алексей Роза (DoctorRoza) 05.12.12 10:55
Отмечусь, чтобы запомнить, на всякий случай!!
10. Борис Моренко (BorisMor) 05.12.12 11:05
(6) vec435, а как вызвать данное окно?
Я только стеком пользуюсь.
11. Борис Моренко (BorisMor) 05.12.12 11:08
(8) DrAku1a, это не совсем трассировка.
Последовательности вызова не вижу.
12. Роман Романов (romansun) 05.12.12 11:15
(2)

Есть два инструмента - замер производительности и стек вызовов.
В замере всё хорошо, только нет одной единственной чертовой колонки... Номера вызова строк по порядку.

Ну, а стек тоже хорош, но он немного не про то. Попробуйте отрассировать проведение дока, увидите.


(1) +1, да, надо что-то такое делать, в ДЗ, в xml или еще как-нить. В справочник медленно.
13. Роман Романов (romansun) 05.12.12 11:19
Я вообще надеюсь на 1С. Весьма непросто разбираться в чем-то новом, в частности на УФ, без мощного набора инструментов.

У них же модулей теперь немерено, к примеру:
УчетНДС
УчетНДСБП
УчетНДСВызовСервера
УчетНДСВызовСервераПовтИсп
УчетНДСКлиентСервер
УчетНДСПереопределяемый
14. Владимир Чаклин (vec435) 05.12.12 11:30
(10) BorisMor, это моя обработка. но по сайту можно найти что-то вроде "анализ кода"
15. Андрей Акулов (DrAku1a) 05.12.12 13:00
(12) в регистр сведений попробуй. быстро вроде бы...
16. Роман Романов (romansun) 05.12.12 14:12
(15)
иеархический справочник хорош и мощен прежде всего своим

"УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ "

Собственно, это единственная причина использования справочника. В РС такую штуку сделать нельзя. В принципе, и просто в ДЗ выводить не слишком удобно - удобно иметь иерархическую таблицу, к которой можно писать всякие разные хитрые запросы.

В данном решении есть еще колонка с временем, но она ни о чем, ибо оно 1С-ное в пределах секунды. Допилить до тысячных, и можно свой замер производительности делать, с блэкджеком и с возможностями снимать производительность попроцедурно, помодульно, "поветочно" и кто как еще придумает.
17. Денис Яковлев (iceflash) 05.12.12 17:25
Хм, вспомнил подобное (не по механике, но по смыслу, правда так и не удалось протестировать), из плюсов:
- без изменения конфы,
- без тормозов
из минусов - это именно анализ, "без трассирования прохождения кода на лету при нажатии вот этой кнопоньки" Кстати как насчет стандартного стека вызовов в конфигураторе 1с?
только анализ кода, и даже более лучше графическое представление:
http://infostart.ru/public/78976/
BorisMor; +1 Ответить
18. Яков Коган (Yashazz) 06.12.12 13:25
За предложение массово менять код типовой конфы как-то очень хочется минуснуть. Или вы потом будете поддержку ручками согласовывать, отслеживать изменения каждого модуля?

Идея стара как мир, разве что с появлением возможности грузить туда-сюда исходники её реализация упростилась...
19. Роман Романов (romansun) 06.12.12 14:06
(18)
поддержку?

Это инструмент получения данных для изучения конфигурации. По сути, делается это один раз - получается дерево вызовов нужного процесса и отдается системным аналитикам.

После этого "отработанный материал выбрасывается". Либо база с накопленной статистикой остаётся для дополнительного анализа.
20. Владимир (bk-81) 06.12.12 17:23
(5) BorisMor, а что из перечисленного не умеет ЗаписьЖурналаРегистрации?
21. адуырщдв (адуырщдв) 07.12.12 08:45
Где то я уже видел такое. Может конечно ошибаюсь.
22. Юрий Патласов (NoRazum) 07.12.12 15:48
";" Не единственная проблема
Еще когда в начале функции определяются переменные.

Разные контору пишут одну и туже конфу ))
23. Роман Романов (romansun) 07.12.12 18:50
(22)

вычищал вроде все варианты с "перем"... все, да не все :)

если не сложно, скиньте пример такой функции
24. Юрий Патласов (NoRazum) 10.12.12 10:01
Бухгалтерия 2.0 последняя конфигурация.
Общие модули. В некотрых нормально, некоторых ошибка.
26. aim (aim) 14.12.12 11:21
Иногда нужно посмотреть "живую" трассу, а иногда нужно посмотреть точки ветвления и от чего программа пошла по этому пути, зависимости. Но это так - к слову. Но вот если верно, что (как Вы пишете), что сложность программы от20 к30 увеличивается на порядок, то это конечно да. Мне уже начало было казаться, что 1С единственная и неповторимая, но при общей непрозрачности 1С кода... 1С может повторить судьбу всех своих монструозных собратьев. Был Мультикс - пришел Юникс; был Windows - пришел Apple, Android и т.д; был IBM x86 - появился ARM.
27. Роман Романов (romansun) 14.12.12 11:36
(26)
о, спасибо за коммент.

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

Вот очень очень не хотелось бы этого.

Сложность 2.0-3.0, думаю, раза в два-три выросла с увеличением количества задействованных модулей в 6-7 раз... Ну, это общая 1С-ная тенденция усложнения и платформы и конфигураций. На курсах 1С часто говорят преподы про это - раньше раз-раз и готов специалист, а щас смотришь, а уже не меньше года на подготовку надо.
28. Евгений Сосна (pumbaE) 24.12.12 02:27
В связи с выходом новой версии снегопата и возможности его работы в режиме отладки, есть идея использовать данную разработку, как каркас по трассировке кода. Сейчас уже можно поставить две точки останова в начале процедуры, например обработки проведения, и в конце, запустить определенный скрипт, который сам будет нажимать F11 и записывать вызовы в базу.

Можно ли будет использовать ваш код для этого?
29. Роман Романов (romansun) 11.01.13 15:10
(28)

да, конечно, без проблем. Будет очень любопытно взглянуть на результат.
30. Евгений Сосна (pumbaE) 11.01.13 15:34
(29) romansun, предварительная реализация пока такая http://screencast.com/t/KQvjn99m , вывожу в дерево и даю возможность перейти в необходимую процедуру при клике на строке дерева. В дальнейшем думаю необходимо будет добавить возможность сохранять стек и анализировать. Это пока сырой вариант, но на дерево вызовов в УТ11 иногда уже страшно становиться смотреть.
romansun; +1 Ответить
31. Евгений Сосна (pumbaE) 17.01.13 12:48
(0) romansun, как идея - включаем тех журнал на CALL, парсим его и получаем фактические вызовы строк и примерно как я в снегопате при отладке делаю, определяю в какой процедуре находится строка и сверяю с предыдущей , получаем дерево вызовов даже без модификации исходных текстов.
32. Роман Романов (romansun) 17.01.13 18:51
33. Paul Nevada (Paul_Nevada) 04.09.13 11:37
Привет!
Интересно и ДРУГОЕ - КАК сами разработчики типовых не запутываются в этих "деревьях"??? Наверняка же они пользуют какие-то вспомогательные инструменты... У кого из вас есть какие мысли (а, может, и информация) на эту тему?
34. Роман Романов (romansun) 04.09.13 13:04
(33) СППР используют...

плюс, я думаю, у них есть неплохое тестовое покрытие
35. Евгений Сосна (pumbaE) 04.09.13 15:19
(34) romansun, сомневаюсь. Вроде и есть тестирование http://v8.1c.ru/o7/201308do/index.htm , но вот почем-то ни разу не хвастаются автоматическим тестированием, покрытием тестами, как регрессионное тестирование позволяет на этапе помещения в хранилище сразу уведомлять разработчика, что есть проблемы с тестами, с производительностью и т.д... Ну а СППР используют, тут согласен :)
36. Paul Nevada (Paul_Nevada) 04.09.13 17:33
(34) romansun, поясни, пожалуйста, что есть "СППР" и "тестовое покрытие"???
37. Роман Романов (romansun) 05.09.13 15:13
38. Paul Nevada (Paul_Nevada) 05.09.13 17:22
39. Сергей Сторожев (ssa) 16.10.13 22:38
Может пригодиться. Спасибо!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа