Здравствуйте! Подскажите, кто, что знает, по данной теме? Интересует последовательность выполнения всех процедур и функций, например, в модуле формы какой-либо обработки. Знаю что есть стек вызовов, но он не поможет, т.к. он показывает предшествующие процедуры из которых вызывалась текущая, а надо посмотреть какие процедуры вообще выполнялись, или чтоб была возможность пройтись по ним всем отладчиком по порядку. Единственный вариант какой знаю - это наставить во всех процедурах точек останова - но это очень долго и трудоемко, особенно в больших модулях. Может знает кто более изящный способ?
(1) JohnySC, трассировка возможна только ручная. Я делаю как, сразу после входа и перед выходом из процедуры/функции делаю вызов функции, которая пишет, что произошел вход (или выход) в функцию такую-то, распечатывает параметры, может быть что-то дополнительно. Если модуль небольшой, то можно выводить в окно сообщений, иначе лучше вывести куда-нибудь в файл и потом над этим файлом медитировать.
Не совсем понятно зачем это нужно. Можно например в каждой процедуре вызывать свою процедуру и передавать ей параметр Имя процедуры, а в процедуре писать в регистр или во внешний файл стек всех вызовов.
(3) Gulf_Stream,
В древнем клиппере, например, была трассировка...
Пользительность такая: не надо непрерывно жать на кнопку. Программа не спеша пробегает построчно модуль, заходя во все процедуры и, естественно, тут же отображает стек вызовов. В любой момент процедуру можно приостановить, возобновить...
Это нужно для того чтоб быстро понять как выполняется тот или иной модуль, например в УПП при открытии конструктора спецификаций, запускается не только процедура "ПриОткрытии", но и срабатывает куча событий, типа "СписокНоменклатураОтдельныйПриАктивизацииСтроки", и многие другие...
Так вот чтоб разобраться что реально происходит в тот или иной промежуток времени, без трассировщика никак...
Я понимаю, что все последовательности описаны в документации, но процедур и объектов очень много, и что за чем выполняется, довольно сложно уследить в комплексе.
SPID пишет:
...Можно например в каждой процедуре вызывать свою процедуру...
То о чем вы тут пишете успешно решается стеком вызовов, но в данной задаче это не пойдет, нужен вариант без доделки, а то если в модуле полсотни процедур - то в каждую чтоли писать?! Тогда уж проще точек останова натыкать...
Ну, да малость не поняли... Выйдете из процедуры, и куда попадете? Вверх по стеку - так его и так посмотреть можно... А мне надо увидеть процедуры которые не связаны с этой процедурой, а будут выполняться независимо от нее - например обработчики событий.
Впустую теряете время. Такую щтуку не написали, потому что она не имеет смысла.
Например есть события, на которые есть обработчики, и эти обработчики друг из друга не вызываются.
В п.4 привели пример насчет "ПриОткрытии" и "СписокНоменклатураОтдельныйПриАктивизацииСтроки".
Они между собой никак не связаны...
...Такую щтуку не написали, потому что она не имеет смысла...
Если Вам смысл не понятен, то это не значит, что его нет. То что обработчики друг из друга не вызываются, про это как раз я и пишу, и как раз здесь и есть смысл необходимости трассировщика. Я как раз и хочу посмотреть последовательность выполнения НЕСВЯЗАННЫХ процедур. А такая штука в платформе есть - это замер производительности, только он малость недоделанный, т.к. нельзя отсортировать результат в порядке выполнения строк. Поэтому и спрашиваю, может профи знают как поступить. Единственный выход который я пока нашел - наставить точек останова в начале всех процедур модуля, но повторяюсь, это довольно долго в больших модулях.
(11) romansun, да, это все понятно, просто не понятно почему разработчики платформы не могли добавить в замер производительности еще один столбец "Момент исполнения" и возможность сортировать по нему, множество проблем и вопросов бы сразу отпало...
(14) JohnySC, по Вашей логике, в случае, если какая-то строка кода вызывалась несколько раз, то и в результат замера производительности она должна быть включена несколько раз (чтобы можно было выстроить все в порядке вызова). В таком случае какие значения будут содержать колонки с количеством вызовов и суммарным временем выполнения строк (ради чего собственно эта оснастка и используется)? Я согласен, что этот механизм, вроде бы, технически несложно вызывать в режиме, когда количество и время операций не суммируется, но зато показывается порядок вызова. При этом назывался бы он, я думаю, иначе ;)
(17) TheGrr, да там в другом дело. JohnySC нужно знать каким путем исполнялась его прога: какие функции из каких вызывались и т. п. В результатах замера производительности этого естественно увидеть нельзя.
(18) Raise66Raise, я прекрасно понимаю, что он хочет ;) Просто я позволил себе сказать, что добавление столбца "Момент исполнения" противоречит сути инструмента замера производительности. Вот и пришлось пояснить свою точку зрения.
Насчет противоречия трассировщика и замера производительности точка зрения TheGrr понятна :-)
Но все равно мне кажется можно было бы объединить трассировщик и замер, просто галочку сверху, как сортировать, по порядку или по времени исполнения. Кстати можно было бы по трассировщику смотреть даже сколько по времени выполняется, например, один проход цикла - в замере этого не увидишь! Здесь по сути в платформе и делать-то практически уже нечего, малость бы замер допилили и все, получился бы очень серьезный и полезный инструмент. Трассировщик вообще много где есть, и чего это 1С на него не смотрит?
(22) romansun, достойно, посмотрим :-)
(23) _kvasil, а что такое ДУ как народ будет догадываться? При копипасте хоть ссылочку на оригинал принято давать. :-)
но все таки речь не об отладочных сообщениях была
Привет!
Интересно и ДРУГОЕ - КАК сами разработчики типовых не запутываются в этих "деревьях"??? Наверняка же они пользуют какие-то вспомогательные инструменты... У кого из вас есть какие мысли (а, может, и информация) на эту тему?
Интересная тема конечно. Еще один удобный механизм которого ждут от 1С, мне лично не хватает, особенно в свете появления БСП и вложенности функций в них. Помогло бы разбираться более быстро в новых возможностях.
Для изучения конфигурации в целом тема наверное интересная.
Для изучения порядка вызовов в конкретной части (открытие формы или проведение) достаточно сделать замер, отсортировать по модулям и проставить точки останова. Поняв один раз принцип вызова обработчиков, больше такого делать не надо. Порядок вызова процедур с программной логикой в общем случае не важен, т.к. может сильно зависеть от условий. Т.е. лучший инструмент пошаговый проход.
Т.е. если бы такой инструмент был, то я скорей всего, им бы не пользовался.