Система Turbo Profiler фирмы Borland | страница 33
Таким образом, профилировщик может прослеживать полную предысторию вызовов для каждой помеченной подпрограммы. Если Вы активировали параметр Statistics| Callers (Статистика| Вызывающие подпрограммы) для всех помеченных подпрограмм, то каждый раз при встрече маркера «области», типа «точка входа в подпрограмму», профилировщик полностью сохраняет свой стек вызовов в буфере, связанном с данной подпрограммой.
Если этот стек полностью идентичен какому-либо из стеков, уже сохраненных для данной подпрограммы, то в этом случае, вместо того, чтобы снова запоминать весь этот стек, просто увеличивается соответствующий счетчик. Если же такой стек вызовов ранее еще не встречался, то профилировщик резервирует новый буфер и записывает в него текущее состояние своего стека вызовов. В результате этих операций сохраняются все пути вызова для данной подпрограммы, а также количество вызовов подпрограммы по каждому из этих путей.
Работа профилировщика со стеком активных подпрограмм, определяется значениями двух параметров, устанавливаемых при помощи команд его меню:
* параметр Statistics| Callers (Статистика| Вызывающие подпрограммы) (может находиться в состоянии Enabled (Включено) или Disabled (Выключено);
* параметр Callers (Вызывающие подпрограммы) для каждой помеченной «области» в окне Areas («Области»).
Более гибкие возможности для контроля путей вызова подпрограмм Вы получаете при использовании локальных меню в окнах Module (Модуль) и Areas («Области»). Вы можете установить для каждой из помеченных «областей» свое собственное значение параметра Callers (Вызывающие подпрограммы). Как команда Callers (Вызывающие подпрограммы) локального меню окна Module (Модуль), так и команда Options (Параметры) локального меню окна Areas («Области») ведут к появлению на экране блока диалога, в котором Вы можете задать одно из следующих значений параметра Callers (Вызывающие подпрограммы): All Callers (Все вызывающие подпрограммы), Immediate Caller (Непосредственно вызывающая подпрограмма) или None (Никакие).
* All Callers (Все вызывающие подпрограммы) означает сохранение полного стека вызовов подпрограмм каждый раз, когда в процессе выполнения, встречается точка входа в помеченную подпрограмму.
* Immediate Caller (Непосредственно вызывающая подпрограмма) означает запоминание только самого верхнего элемента стека вызовов подпрограмм при попадании на точку входа в данную помеченную подпрограмму.
* None (Никакие) означает, что при встрече, в процессе выполнения, маркера «области» типа «точка входа в подпрограмму» никакая информация из стека вызовов подпрограмм не запоминается.