Есть ли способ получить диаграмму того, что называет что? - PullRequest
8 голосов
/ 23 октября 2011

Для Delphi 2010, есть ли способ получить диаграмму, начиная с функции X (или даже всей программы), из того, что другие функции / процедуры называются ...

Что-то вроде:

Function X
  - Function A
    - Procedure B
    - Procedure C
  - Function D

(Конечно, графический будет лучше ...)

Ответы [ 4 ]

9 голосов
/ 23 октября 2011

Peganza Pascal Analyzer предлагает как дерево вызовов , так и дерево обратного вызова отчеты. Есть ряд других доступных статических анализаторов кода, но это тот, с которым я знаком.

Насколько я знаю, в Delphi нет ничего подобного.

3 голосов
/ 24 октября 2011

Вот пример диаграммы вызовов AQTime.Последовательности вызовов AQTime можно собирать либо динамически (из запущенной программы), что означает, что вам нужно активировать путь кода, который вы хотите отобразить (убедитесь, что какое-то меню или кнопка, которую вы можете щелкнуть в пользовательском интерфейсе, вызывает этот код), а затем вы можете построить графикэто, или они могут быть собраны статически.Динамический может показаться более трудоемким, и вы можете подумать, что статический анализ лучше, и в некотором смысле статический анализ лучше, но диаграммы последовательности динамических вызовов на самом деле "то, что действительно произошло за один конкретный прогон", тогда как статический анализ дает "чтосинтаксический анализатор может выяснить, что он всегда верен, независимо от того, будет ли этот путь кода выполняться вами или вашим клиентом вообще ".На самом деле, я рекомендую использовать оба пути и сравнивать их, чтобы увидеть, что вы изучаете.

enter image description here

AQTime pro довольно дорог, но я не знаю олюбые бесплатные альтернативы.(Нет, я не работаю на SmartBear или Embarcadero.)Я профессиональный разработчик, и я считаю, что такие инструменты стоят своей цены.Ваш вызов.

Обычно я использую функцию последовательности вызовов при выполнении из профилировщика производительности, чтобы я мог получить некоторые значения времени (на приведенной ниже схеме показано Time: #.## msec, поскольку данные были собраныпрофилировщик производительности, динамически, а не профилировщик статического анализа, который не знает, сколько времени занимает выполнение функции).

2 голосов
/ 24 октября 2011

Код Visual для блок-схемы (FateSoft) также хорош и полезен.

2 голосов
/ 24 октября 2011

IDA Pro может сделать это для вас . , (для любой программы, не только для delphi progs)

...