【问题标题】:Is there a way of getting a diagram of what calls what?有没有办法得到什么叫什么的图表?
【发布时间】:2011-10-23 19:26:01
【问题描述】:

对于 Delphi 2010,有没有一种方法可以得到一个图表,从函数 X(甚至整个程序)开始,其他函数/过程被调用...

类似的东西:

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

(当然图形会更好......)

【问题讨论】:

  • 相关但不同; Delphi Enterprise/Architect UML 特性包含对序列图的支持。我怀疑,这不完全是您所要求的,而是相关的。另一个工具的序列图示例在这里:ibm.com/developerworks/rational/library/3101.html
  • 两年后看这个,我希望OP已经表明他是在寻找静态还是动态调用树。

标签: delphi diagram


【解决方案1】:

Peganza Pascal Analyzer 提供call treereverse call tree 报告。还有许多其他可用的静态代码分析器,但这是我熟悉的。

据我所知,Delphi 没有内置任何这种性质的东西。

【讨论】:

  • AQTime(我认为现在包含在 Delphi 中)将显示特定代码运行的调用树。
  • AQTime 既做静态分析又做动态分析,而 Peganza PAL 只做静态分析。 AQTime 有更多的图形显示,而 Peganza 输出是文本,您可以将其输出为纯文本或 xml,然后自己构建一个图表。 PAL 找不到大量动态发生的真实世界调用链,例如事件回调,甚至是派生类覆盖虚拟方法的情况,然后调用其他未由基类方法调用的东西等。为此,需要进行动态分析。
  • 顺便说一句,我仍然建议购买 PAL,因为它像罗宋汤一样便宜,而且它有很多很棒的“代码卫生”功能,比如用于 pascal 的“Lint 工具”。成本低于 200 美元。比 AQTime 便宜很多。
【解决方案2】:

这是 AQTime 调用图表的示例。 AQTime 的调用序列可以动态收集(从正在运行的程序收集),这意味着您必须激活要绘制图表的代码路径(确保您可以在 UI 中单击的某些菜单或按钮调用此代码)然后您可以绘制图表它,或者它们可以静态收集。动态的可能看起来工作量更大,您可能认为静态分析更好,并且在某些方面静态分析更好,但动态调用序列图实际上是“在一次特定运行中真正发生的事情”,而静态分析提供“什么解析器可以确定始终为真,无论此代码路径是否由您或您的客户运行”。事实上,我建议同时使用这两种路径,并比较它们以了解你学到了什么。

AQTime pro 相当昂贵,但我不知道有任何免费的替代品。 (不,我不为 SmartBear 或 Embarcadero 工作。)。我是一名专业的开发人员,我发现这样的工具物有所值。您的来电。

我通常在性能分析器中在运行时使用调用序列功能,以便我得到一些时间值(下图显示Time: #.## msec,因为数据是由性能分析器动态收集的,而不是静态分析分析器,它不知道一个函数需要多长时间执行)。

【讨论】:

    【解决方案3】:

    IDA Pro can do that for you。 . (对于任何程序,不仅是 delphi progs)

    【讨论】:

      【解决方案4】:

      Code Visual to Flowchart (FateSoft) 也不错,很有帮助。

      【讨论】:

        猜你喜欢
        • 2013-01-04
        • 1970-01-01
        • 2010-12-15
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 2013-07-15
        • 1970-01-01
        相关资源
        最近更新 更多