如何在Delphi应用程序中找到所有单元?

时间:2009-04-08 20:56:49

标签: delphi debugging

找到所有外部依赖项很容易。只需运行程序并打开模块信息窗口即可。但是,如何找到所有内部依赖项?我知道程序会保留所有单元的列表,因为我已经在初始化代码中跟踪了一两次。但有没有简单的方法从调试器访问此列表?

9 个答案:

答案 0 :(得分:25)

Delphi调试器可以显示哪些单元被编译成模块(exe,dll或包)。您可以在Modules视图中查看(View | Debug Windows | Modules)。单击左上窗格中的模块,左下窗格将显示该模块中内置的所有编译单元。如果某个特定的编译单元由多个源文件组成(即.pas和.inc文件),那么也会显示(当你展开comp单元时)。

或者,您可以让Delphi编译器在编译项目时通过传递--depends向您显示已使用的.dcus列表。它将输出一个.d文件,其中包含所需的.dcus(和.dcps)列表。

答案 1 :(得分:6)

我使用GExperts项目依赖项 使用“Used By ...”,您可以看到包含但未被任何人使用的单位。 但是你看不到包含在use子句中的单元,当它们没有任何实际调用的代码时可以删除。

这是帮助:


项目依赖关系

项目依赖性专家使您能够查看特定单位使用的单位,以及使用特定单位的单位。激活此专家后,它会解析当前项目的所有使用子句的源代码,并构建依赖项列表。要查看特定单元的依赖关系信息,请在左窗格中单击它。右侧窗格将包含依赖项信息。间接依赖性是特定单位的使用单位使用的单位。

您可以通过单击工具栏上的刷新按钮随时刷新依赖关系信息,也可以通过单击列标题对文件列表进行排序。
alt text
(来源:gexperts.org


OTOH,您也可以使用免费Peganza's ICARUS作为更详细的报告工具,但交互性较差...

答案 2 :(得分:6)

另一种相当麻烦的方法是生成一个地图文件,它包含程序中使用的所有单位的列表。

另见这个答案: How can I find all the units in my Delphi app?

答案 3 :(得分:4)

您是否从Peganza Software查看了Pascal Analyzer或免费限制版Icarus?他们将创建“使用报告”,告诉您哪个模块使用了其他模块,因此应该为您提供您所追求的信息。

马克

答案 4 :(得分:4)

GExperts有一个Project Dependencies工具。我在尝试追踪用过的单位之前使用过它。您无法在其中进行搜索,但可以将列表导出为CSV文件并在那里搜索。这也仅列出了使用部分中的内容。如果你有一个未使用的模块,它仍然会出现。

答案 5 :(得分:3)

我知道至少有两种方法可以尝试查看项目中使用的所有单位

  1. CTRL-SHIFT-B打开对象浏览器。如果我没有弄错的话,在这里你可以看到用过的单位。我不完全确定这种方法,也没有Delphi可用来验证它。
  2. 使用Modelmaker;模型制作者可以为您提供所有单位依赖性视图的树。有关详细信息,请查看Visualizing existing code部分。

答案 6 :(得分:1)

最简单的方法是编译程序并检查编译器创建的.dcu。确保设置编译器以在单独的目录中创建.dcu,例如c:\dcu。我创建了一个简单的实用程序,在.pas中搜索编译器搜索路径中的每个.dcu文件(可以从.cfg.dof或{{1文件)。

答案 7 :(得分:1)

您可以将MAP文件与MapFileStats结合使用,这不仅会为您提供所有依赖项,还会为您提供最终可执行文件中的代码(和资源)数量。

有用的是发现你有依赖的单位,但几乎没有使用,以及发现“肥猪”单位,这些单位带有所有东西加上厨房水槽。

FWIW,减少依赖性和消除生猪不仅有利于可执行文件的大小,在升级到新版本的时候,这也是有益的。

答案 8 :(得分:0)

有一个名为UsgParse的(相当古老的)实用工具。它构建了项目引用的所有单元的树视图。

我在NexusDB网站上找到了一份副本 http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.thirdpartytools.general/2004-03/0231.html

来源: http://www.nexusdb.com/downloads/USGParse/USGParse_src.zip

二进制:http://www.nexusdb.com/downloads/USGParse/USGParse.zip