Система Turbo Profiler фирмы Borland | страница 32
Если вы хотите изъять из рассмотрения время выполнения func1, но, при этом, возобновлять подсчет времени после возврата из func1, вы должны пометить маркером «области» оператор возврата из func1. Если не существует явного оператора возврата, то следует пометить закрывающую фигурную скобку, которой заканчивается определение функции.
Сбор статистических данных о вызовах подпрограмм.
Активной в данный момент времени подпрограммой считается подпрограмма, находящаяся на вершине стека вызовов, формируемого профилировщиком. В режиме активного анализа (т. е. когда профилировщик собирает информацию о путях вызова, а также другие данные, не связанные с подсчетом времени) система Turbo Profiler создает свой собственный стек вызовов подпрограмм. Этот стек устроен аналогично стеку вызовов любой другой программы, выполняющейся под управлением DOS. Стек, создаваемый профилировщиком, поддерживается совершенно независимо от стека пользовательской программы и используется исключительно для сохранения информации о вызовах подпрограмм, в которых еще не был выполнен оператор возврата.
Для того, чтобы поддерживать стек вызовов подпрограмм в системе Turbo Profiler имеется два типа маркеров «области»:
* маркер «области» типа «точка входа в подпрограмму» (маркер подпрограммы);
* обычный маркер «области» (маркер типа метка)
Когда профилировщик наталкивается на маркер «области» типа «точка входа в подпрограмму», он помещает активную на данный момент подпрограмму на вершину стека активных подпрограмм. Затем встреченный маркер становится маркером активной подпрограммы.
Если теперь мы повстречаем обычный маркер, то это никак не повлияет на статистические данные, собираемые для подпрограммы, выполняющейся в данный момент и на стек активных подпрограмм. Появление обычного маркера означает лишь смену активной «области», т. е. предыдущая активная «область» исключается из рассмотрения.
Статус же текущей активной подпрограммы не меняется до тех пор, пока профилировщик не натолкнется на оператор возврата из данной подпрограммы.
Когда, в процессе выполнения, в теле активной подпрограммы встречается оператор возврата, маркер «области», относящийся к данной подпрограмме, переходит в пассивное состояние.
С верхушки стека активных подпрограмм, поддерживаемого профилировщиком, берется подпрограмма, которая и становится активной до тех пор, пока не будет выполнен оператор возврата, находящийся в ее теле, или не повстречается другой маркер «области» типа «точка входа в подпрограмму».