【问题标题】:How can I generate a reverse call tree for a Delphi project?如何为 Delphi 项目生成反向调用树?
【发布时间】:2011-06-30 01:08:34
【问题描述】:

有没有一种方法可以快速搜索到我项目中某个特定函数的完整代码路径列表,以查明某些上层函数是否直接或间接调用它?例如,确定MyLowLevelFunction 是否可以从TargetFunction 访问的一些可能输出:

代码路径 1

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

代码路径 2

ModuleB2.TopLevelFunction |--TargetModule.TargetFunction

【问题讨论】:

  • 我可能错了。您是在寻找代码的静态分析,还是在寻找运行时的东西?
  • 我不认为这是一个骗局。这是关于反向调用树报告(不是调用堆栈),通常通过静态分析完成,尽管我想你可以使用采样分析器来完成。
  • 这个问题我完全不清楚。也许如果您使用更明显独立的示例(例如,比ModuleAModuleD 更不同的示例),它会更清楚。 (最后一个字母的不同很难区分它们,尤其是在与--------------------------- 杂乱无章的情况下)
  • 堆栈值(单个调用树)和反向调用树的区别在于,反向调用树就像所有可能的正向调用树的矩阵乘积。

标签: delphi metrics static-code-analysis


【解决方案1】:

Peganza 的 Pascal 分析器有一个Reverse call tree 报告。我是一名客户,对此非常满意,尽管我从未使用过那种特定类型的报告,而是更喜欢简单的cross-ref report,它也有。

作为一个有趣的旁注,静态分析工具将无法找到间接调用,例如通过事件回调。

【讨论】:

  • 嗨 Warren,很幸运能从像你这样的 Pascal Analyzer 用户那里得到答案:) 我已经下载了 Pascal Analyzer 的评估版。但是,评估版不包含“反向调用树报告”和“交叉引用报告”功能。我想知道它是否可以将报告限制为特定功能?我这样问的原因是生成的“调用树报告”是一个大约数百 MB 的文本文件,很难搜索。谢谢~
  • Jim:这是大多数报告的基本问题。我在 Delphi 中编写了一个简单的实用程序来过滤报告的输出以包含我想要的内容,因为大多数报告不包含我想要的内容。此外,如果您的项目使用运行时包,则似乎有必要构建一个整体(无包)项目,即使您从未构建它,以使基于包的解决方案的所有单元都包含在单个分析中。这些限制有一些解决方法。
  • 沃伦:谢谢你的回答!现在很清楚这个软件有什么限制。我想我最终会购买它并编写一个帮助程序。接受你的解决方案~
  • 我无法通过评估版本生成构建依赖树:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2020-05-20
相关资源
最近更新 更多