Трассировка кода 1с 8 - возможно ли?

1. JohnySC 179 06.12.11 12:45 Сейчас в теме
Здравствуйте! Подскажите, кто, что знает, по данной теме? Интересует последовательность выполнения всех процедур и функций, например, в модуле формы какой-либо обработки. Знаю что есть стек вызовов, но он не поможет, т.к. он показывает предшествующие процедуры из которых вызывалась текущая, а надо посмотреть какие процедуры вообще выполнялись, или чтоб была возможность пройтись по ним всем отладчиком по порядку. Единственный вариант какой знаю - это наставить во всех процедурах точек останова - но это очень долго и трудоемко, особенно в больших модулях. Может знает кто более изящный способ?
AllexSoft; +1
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
15. Raise66Raise 08.12.11 08:04 Сейчас в теме
(1) JohnySC, трассировка возможна только ручная. Я делаю как, сразу после входа и перед выходом из процедуры/функции делаю вызов функции, которая пишет, что произошел вход (или выход) в функцию такую-то, распечатывает параметры, может быть что-то дополнительно. Если модуль небольшой, то можно выводить в окно сообщений, иначе лучше вывести куда-нибудь в файл и потом над этим файлом медитировать.
JohnySC; +1
16. JohnySC 179 08.12.11 08:16 Сейчас в теме
(15) Raise66Raise, ну да, неплохая идея писать лог в текстовый файлик, а потом над ним работать
+
2. SPID 06.12.11 12:59 Сейчас в теме
Не совсем понятно зачем это нужно. Можно например в каждой процедуре вызывать свою процедуру и передавать ей параметр Имя процедуры, а в процедуре писать в регистр или во внешний файл стек всех вызовов.
+
3. Gulf_Stream 06.12.11 13:06 Сейчас в теме
Насколько мне известно, "из коробки" такой возможности нет даже в более "взрослых" средах разработки, не говоря об 1С.
+
20. warenic 109 08.12.11 14:52 Сейчас в теме
(3) Gulf_Stream,
В древнем клиппере, например, была трассировка...
Пользительность такая: не надо непрерывно жать на кнопку. Программа не спеша пробегает построчно модуль, заходя во все процедуры и, естественно, тут же отображает стек вызовов. В любой момент процедуру можно приостановить, возобновить...
+
4. JohnySC 179 06.12.11 13:16 Сейчас в теме
SPID пишет:

Не совсем понятно зачем это нужно...
Это нужно для того чтоб быстро понять как выполняется тот или иной модуль, например в УПП при открытии конструктора спецификаций, запускается не только процедура "ПриОткрытии", но и срабатывает куча событий, типа "СписокНоменклатураОтдельныйПриАктивизацииСтроки", и многие другие...
Так вот чтоб разобраться что реально происходит в тот или иной промежуток времени, без трассировщика никак...
Я понимаю, что все последовательности описаны в документации, но процедур и объектов очень много, и что за чем выполняется, довольно сложно уследить в комплексе.
SPID пишет:

...Можно например в каждой процедуре вызывать свою процедуру...
То о чем вы тут пишете успешно решается стеком вызовов, но в данной задаче это не пойдет, нужен вариант без доделки, а то если в модуле полсотни процедур - то в каждую чтоли писать?! Тогда уж проще точек останова натыкать...
+
5. RustamZz 06.12.11 13:28 Сейчас в теме
Замер производительности не подходит?
+
6. JohnySC 179 06.12.11 13:30 Сейчас в теме
н
RustamZz пишет:

Замер производительности не подходит?
Нет конечно, там же сортировка идет по длительности, а не по порядку исполнения.
Monte Carlo; +1
7. Drak0n 187 06.12.11 13:53 Сейчас в теме
Может что то не понимаю, но чем не угодила команда "Шагнуть из" (Shift+F11) отладчика?
Поставил точку останова и прыгай сколько угодно...
+
8. JohnySC 179 06.12.11 14:01 Сейчас в теме
Drak0n пишет:

Может что то не понимаю...
Ну, да малость не поняли... Выйдете из процедуры, и куда попадете? Вверх по стеку - так его и так посмотреть можно... А мне надо увидеть процедуры которые не связаны с этой процедурой, а будут выполняться независимо от нее - например обработчики событий.
+
9. Yagodka.Andrey 07.12.11 14:42 Сейчас в теме
Впустую теряете время. Такую щтуку не написали, потому что она не имеет смысла.
Например есть события, на которые есть обработчики, и эти обработчики друг из друга не вызываются.
В п.4 привели пример насчет "ПриОткрытии" и "СписокНоменклатураОтдельныйПриАктивизацииСтроки".
Они между собой никак не связаны...
+
10. JohnySC 179 07.12.11 17:16 Сейчас в теме
Yagodka.Andrey пишет:

...Такую щтуку не написали, потому что она не имеет смысла...
Если Вам смысл не понятен, то это не значит, что его нет. То что обработчики друг из друга не вызываются, про это как раз я и пишу, и как раз здесь и есть смысл необходимости трассировщика. Я как раз и хочу посмотреть последовательность выполнения НЕСВЯЗАННЫХ процедур. А такая штука в платформе есть - это замер производительности, только он малость недоделанный, т.к. нельзя отсортировать результат в порядке выполнения строк. Поэтому и спрашиваю, может профи знают как поступить. Единственный выход который я пока нашел - наставить точек останова в начале всех процедур модуля, но повторяюсь, это довольно долго в больших модулях.
+
11. romansun 193 07.12.11 17:46 Сейчас в теме
стек

и терпение, терпение и еще раз терпение

и, в том числе и поэтому, спецы по УПП вполне могут рассчитывать на +-100К



P.S. иногда использую "сообщить(<где я>)", когда надо отловить последовательность событий
+
12. JohnySC 179 07.12.11 18:41 Сейчас в теме
(11) romansun, да, это все понятно, просто не понятно почему разработчики платформы не могли добавить в замер производительности еще один столбец "Момент исполнения" и возможность сортировать по нему, множество проблем и вопросов бы сразу отпало...
+
13. TheGrr 141 07.12.11 21:59 Сейчас в теме
(12) JohnySC, потому что это немного противоречит самой идее замера производительности ;)
+
14. JohnySC 179 08.12.11 07:14 Сейчас в теме
(13) TheGrr, в чем противоречит?!
+
17. TheGrr 141 08.12.11 08:43 Сейчас в теме
(14) JohnySC, по Вашей логике, в случае, если какая-то строка кода вызывалась несколько раз, то и в результат замера производительности она должна быть включена несколько раз (чтобы можно было выстроить все в порядке вызова). В таком случае какие значения будут содержать колонки с количеством вызовов и суммарным временем выполнения строк (ради чего собственно эта оснастка и используется)? Я согласен, что этот механизм, вроде бы, технически несложно вызывать в режиме, когда количество и время операций не суммируется, но зато показывается порядок вызова. При этом назывался бы он, я думаю, иначе ;)
+
18. Raise66Raise 08.12.11 13:03 Сейчас в теме
(17) TheGrr, да там в другом дело. JohnySC нужно знать каким путем исполнялась его прога: какие функции из каких вызывались и т. п. В результатах замера производительности этого естественно увидеть нельзя.
+
19. TheGrr 141 08.12.11 13:30 Сейчас в теме
(18) Raise66Raise, я прекрасно понимаю, что он хочет ;) Просто я позволил себе сказать, что добавление столбца "Момент исполнения" противоречит сути инструмента замера производительности. Вот и пришлось пояснить свою точку зрения.
+
21. JohnySC 179 08.12.11 15:27 Сейчас в теме
Насчет противоречия трассировщика и замера производительности точка зрения TheGrr понятна :-)
Но все равно мне кажется можно было бы объединить трассировщик и замер, просто галочку сверху, как сортировать, по порядку или по времени исполнения. Кстати можно было бы по трассировщику смотреть даже сколько по времени выполняется, например, один проход цикла - в замере этого не увидишь! Здесь по сути в платформе и делать-то практически уже нечего, малость бы замер допилили и все, получился бы очень серьезный и полезный инструмент. Трассировщик вообще много где есть, и чего это 1С на него не смотрит?
+
22. romansun 193 04.12.12 22:26 Сейчас в теме
http://infostart.ru/public/164960/

как некое временное решение... для анализов и раздумий :)
+
24. JohnySC 179 06.12.12 16:48 Сейчас в теме
(22) romansun, достойно, посмотрим :-)
(23) _kvasil, а что такое ДУ как народ будет догадываться? При копипасте хоть ссылочку на оригинал принято давать. :-)
но все таки речь не об отладочных сообщениях была
+
23. _kvasil 06.12.12 16:17 Сейчас в теме
Иногда возникает необходимость в трассировке кода программы - т.е. в выдаче в окошко сообщений значений переменных на каждом проходе через точку кода.

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

Рассмотрим код:
С=0;
Для Инд=1 по 10 Цикл
С=С+Инд;
КонецЦикла; //Здесь ставим условную точку останова


На указанной строке ставим точку останова с условием:
ДУ("Сообщить(""Сумма:""+П)", С)


Теперь при отладке программы в окошке сообщения трассируется выполнение кода:

Сумма:1
Сумма:3
Сумма:6
Сумма:10
Сумма:15
Сумма:21
Сумма:28
Сумма:36
Сумма:45
Сумма:55
+
25. Paul_Nevada 04.09.13 11:38 Сейчас в теме
Привет!
Интересно и ДРУГОЕ - КАК сами разработчики типовых не запутываются в этих "деревьях"??? Наверняка же они пользуют какие-то вспомогательные инструменты... У кого из вас есть какие мысли (а, может, и информация) на эту тему?
+
26. motorkuzbassa.it 99 04.09.13 11:44 Сейчас в теме
(25)да чего там путаться, сидишь на пректе конфу за 3 мес наизусть помнишь.
+
27. AllexSoft 04.09.13 11:48 Сейчас в теме
Интересная тема конечно. Еще один удобный механизм которого ждут от 1С, мне лично не хватает, особенно в свете появления БСП и вложенности функций в них. Помогло бы разбираться более быстро в новых возможностях.
+
28. DKiguin 05.09.13 02:00 Сейчас в теме
Для изучения конфигурации в целом тема наверное интересная.
Для изучения порядка вызовов в конкретной части (открытие формы или проведение) достаточно сделать замер, отсортировать по модулям и проставить точки останова. Поняв один раз принцип вызова обработчиков, больше такого делать не надо. Порядок вызова процедур с программной логикой в общем случае не важен, т.к. может сильно зависеть от условий. Т.е. лучший инструмент пошаговый проход.
Т.е. если бы такой инструмент был, то я скорей всего, им бы не пользовался.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот