2011-06-30 4 views
5

Есть ли способ быстро найти полный список путей кода к одной конкретной функции в моем проекте, чтобы выяснить, вызывает ли это определенную функцию верхнего рычага прямо или косвенно? Например, некоторые из возможных результатов, чтобы определить, является ли MyLowLevelFunction достижима из TargetFunction:Как создать дерево обратного вызова для проекта Delphi?

путь Код 1

 
ModuleA2.TopLevelFunction 
|--ModuleA1.SomeFunction 
|----Utility.MyLowLevelFunction 

путь Код 2

 
ModuleB2.TopLevelFunction 
|--TargetModule.TargetFunction <-- This calls MyLowLevelFunction indirectly 
|----ModuleB1.SomeFunction 
|------Utility.MyLowLevelFunction 
+0

Возможный дубликат [Отобразить стек вызовов в приложении Delphi Win32] (http://stackoverflow.com/questions/258727/display-the-call-stack-in-a-delphi-win32-application) или [ Необходимо периодически регистрировать трассировку стека/стека вызовов] (http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log-the-call-stack-stack-trace-for- каждый метод-метод) –

+1

Возможно, я ошибся в обмане. Вы ищете статический анализ кода или ищете что-то во время выполнения? –

+0

Я не думаю, что это обман. Речь идет об отчете дерева обратных вызовов (а не о стеке вызовов), обычно это делается с помощью статического анализа, хотя, я полагаю, вы могли бы сделать это с помощью пробоотбора проб. –

ответ

6

Паскаль анализатор от Peganza имеет Reverse call tree отчет. Я клиент и очень доволен этим, хотя я никогда не использовал этот тип отчета, предпочитая вместо этого простой cross-ref report, который он также имеет.

В качестве интересного инструмента статического анализа примечания, связанные с побочными эффектами, не смогут найти вызовы, которые являются косвенными, например, посредством обратного вызова события.

+0

Привет, Уоррен, мне так повезло получить ответ от пользователя Pascal Analyzer, как вы :) Я загрузил оценочную версию Pascal Analyzer. Однако в редакции оценки не содержится функция «Отчет об обратном вызове», а также «отчет перекрестной ссылки». Мне было интересно, может ли он ограничивать отчетность конкретной функцией? Причина, по которой я так спрашиваю, заключается в том, что сгенерированный «отчет дерева вызовов» представляет собой текстовый файл сотнями МБ, который затрудняет поиск. Спасибо ~ – Jim

+1

+1 для примечания события. –

+1

Джим: Это основная проблема с большинством отчетов. Я написал простую утилиту в Delphi для фильтрации вывода отчетов, чтобы содержать то, что я хочу, потому что большинство отчетов не содержат того, что я хочу. Кроме того, если ваш проект использует пакеты времени исполнения, представляется необходимым создать монолитный (без пакетов) проект, даже если вы его никогда не создадите, чтобы все единицы пакетного решения были включены в один анализ. Для этих ограничений существуют обходные пути. –