4

这是我的问题,我正在整理我多年来修改的一些旧代码并删除冗余函数,

我可以用慢的方式来做,然后把它注释掉,看看编译器是否抛出错误。但我只是想知道是否有任何工具可以扫描代码并给出调用给定函数的函数列表。

我查看了 ge-experts 和 icarus,但他们只在单位和类级别上这样做,而不是在功能上。

欢迎任何建议,非常感谢,布赖恩

4

5 回答 5

6

Delphi 的最新版本通过上下文菜单或 Ctrl-Shift-Enter 提供“搜索参考”。与简单的“在文件中搜索”相比,它的优势在于它只会找到对光标下当前函数的引用,而不是任何函数或其他具有相同名称的标识符。

于 2012-07-14T15:59:46.580 回答
6

编译你的项目。然后,在 IDE 中,那些被访问的行(而不是死代码)将在左边距有一个蓝点:

在此处输入图像描述

于 2012-07-14T16:31:55.740 回答
4

没有一种方法是完美的,以下一种方法的局限性在于:

  • .MAP 文件将包含链接器无法消除的功能(例如覆盖您的代码所触及的类中的方法)
  • 它只会给你方法名称,但如果方法被重载,可以使用这些方法的多个版本

使用 .MAP 文件的最大优点是它们比代码编辑器中的蓝点更容易扫描。

因此,它确实回答了您的问题以提供功能列表。但这实际上可能不是您所追求的(:

使用 .MAP 文件的方法:

  • 更改您的项目以包含详细的 .MAP 文件
  • 重建你的项目
  • 您的 .EXE 文件的目录现在将包含一个 .MAP 文件
  • 扫描 .MAP 文件以查找 .EXE 中包含的函数名称

该 .MAP 文件将排除编译器和链接器消除的函数。
这些很好地表明了您拥有哪些“死”代码。

以类似的方式,您可以使用JDBG 信息。这包含更多上下文,但也需要您自己编写一些工具。

于 2012-07-14T17:09:20.827 回答
0

对于帕斯卡来说,这是微不足道的。首先列出所有函数,然后为每个函数在文本中搜索它,而不是在单词“function”之后,然后是“(”。awk 将是一个很好的工具。

于 2012-07-14T15:55:07.467 回答
0

如果您的 Delphi 版本是 2007 年(或之前的版本?),我强烈建议您考虑使用DGrok:试一试,您会看到它的能力(演示应用程序会告诉您)。

正如作者所指出的,您仍然需要实现符号表支持,以便工具可以进行重构查找引用:滚动您自己的...

如果您坚持使用 Delphi,请不要担心,请前往 Turbo87 的PasParse(最初用 C# 编写的 DGrok 解析器的 Delphi 端口!

请注意,Turbo87已经分叉了原始Joe White的 Dgrok(2008 年的最新版本)(更新到 VS2010 并为 LexScanner 添加了一些文档)。

于 2012-07-15T04:39:36.077 回答