源码模块关系分析工具使用说明

欢迎您使用 CnPack 开发组开发的源码模块关系分析工具 CnPack Relation Analyzer。

本工具主要用来分析 Delphi 编译生成的可执行文件内的单元与包信息，同时也可分析包之间的关联关系以及包与其使用的单元之间的关联关系。分析的结果可以保存成 ARF 文件，同时也可编辑生成关联信息记录 SMR 文件，以达到在后续开发过程中方便地查询源代码和受影响的模块之间关系的目的。

对于普通的分析，可在“分析可执行文件”页中打开一个或多个可执行文件进行分析，分析结果可保存成 ARF 文件并在“查看分析结果”页中重新加载查看。

ARF 是自动分析出来的结果，只包含 Pas 文件名和可执行文件之间的关联，不包括其他文件以及具体的路径信息。对于高级应用，可在“编辑源码模块关系”页中，将 ARF 通过手工编辑的方式生成包含完整的文件名与可执行文件之间关联关系的 SMR 文件。这样在后续的开发过程中，便可使用“查看源码模块关系”页来进行重新查看了。

分析可执行文件

分析可执行文件是源码模块关系分析工具的基本功能，它能分析可执行文件，得到其包列表与单元列表。它的界面如图所示：

- 添加可执行文件：从磁盘上添加可执行文件到待分析文件列表中，以备分析。

- 分析文件：分析待分析文件列表中选中的文件，得到其包列表和单元列表。

- 分析所有文件：对待分析文件列表中的所有文件进行分析，得到它们的包列表和单元列表。

- 清空所有文件：清空待分析文件列表中的所有文件，分析结果也一并清除。

- 保存分析结果记录：将当前的分析结果保存为ARF文件。ARF文件是普通的INI文件，记录了这批可执行文件所包含的包列表和单元列表内容，可在记事本等工具中打开查看。

- 附加结果记录文件：将当前分析结果附加到另外一个已存在的ARF文件中。

查看分析结果

已保存的ARF的内容，可在此页重新加载供查看。重新加载后，此界面允许按一定规则查看引用关系，包括按可执行模块查看、按单元查看等，还能查找重复的单元名。它的界面如图所示：

- 打开结果记录：打开一预先保存的ARF文件并显示。

- 清空：清空界面内容。

- 按可执行模块查看：上图是ARF文件按可执行模块查看时的状态，ARF文件中的可执行文件显示在可执行文件列表中。选中一可执行文件时，将显示它包含的单元、它引用的包、以及引用过它的模块。

  - 所包含的单元：列出ARF文件中此可执行模块所包含的单元名列表。
  - 引用的包：列出此可执行模块中直接引用的包列表。
  - 所有引用的包：列出此可执行模块直接引用的包列表，以及引用的包递归引用的包列表全集。举例说，如果模块a.exe直接引用了包b.bpl，而b.bpl引用了c.bpl，那么选中a.exe时，引用的包中会出现b.bpl，而所有引用的包中将出现b.bpl和c.bpl。这个列表是说明编译此包究竟需要用到哪些包。
  - 直接引用此模块的模块：在可执行模块列表中选中某模块时，此处将列出直接引用此模块的模块列表。
  - 所有引用此模块的模块：在可执行模块列表中选中某模块时，此处将列出直接和间接引用此模块的模块列表。举例说，如果模块c.exe引用b.bpl，而模块b.bpl又引用了a.bpl，那么选中模块a.bpl时，直接引用此模块的模块为b.bpl，而所有引用此模块的模块为b.bpl和c.exe。

- 上一屏：双击某模块列表时，可切换到此模块以查看此模块的引用关系。上一屏用于回退到上一个查看过的模块，而不是文件列表中的前一个模块。

- 下一屏：通过上一屏回退后，下一屏可前进到曾查看过的模块。

- 查找：查找框用来快速定位文件名，支持通配符。上下键可在源文件列表中上下移动，Ctrl+Home或End则是定位到源文件列表的首尾，Ctrl+上下键是查找上一个和下一个。此查找功能在其余界面的源文件列表中也适用。

- 按单元查看：双击单元列表中的某单元，可按单元查看单元的详情。选中单元列表中的某单元时，同样能列出直接引用此单元的模块和所有引用此单元的模块。如图所示：

- 直接引用此单元的模块：在单元列表中选中某单元时，此处将列出直接引用此单元的模块列表。
- 所有引用此单元的模块：在单元列表中选中某单元时，此处将列出直接和间接引用（包括递归引用）此单元的模块列表全集。举例说，如果模块a.bpl引用了b.bpl，而b.bpl包含单元bb.pas，那么选中bb.pas时，直接引用此单元的模块中会出现b.bpl，而所有引用此单元的模块中将会出现a.bpl和b.bpl。

- 重复的单元：本页能列出一批模块所包含的单元中重复的部分，如图所示：

- 可执行文件：可执行文件列表，列出了该ARF中的可执行模块。

- 增加：点击“增加”按钮可将选中的可执行模块增加到选中的可执行文件列表中，双击某一可执行模块同样能达到此功能。

- 增加所有：点击“增加所有”按钮可将所有可执行模块增加到选中的可执行文件列表中。

- 选中的可执行文件：被用户选中的可执行文件。

- 删除：从选中可执行文件列表中移除选中的文件。

- 删除全部：移除选中可执行文件列表中的所有文件。

- 重复的单元：显示选中的可执行文件列表中的所有可执行文件所包含的重复的单元名。

- 保存：将重复的单元列表保存为文本文件。

编辑源码模块关系

保存的ARF内容仅仅只记录了模块名和源码文件名的简单对应关系，源码文件名不包括路径名。如果我们需要获得一个大项目中所有的具体文件名（包括路径）和其编译生成的最终模块BPL/DLL/EXE等的关系，则需要应用SMR编辑生成的方式。本界面用于编辑生成SMR文件，它的界面如图所示：

一个SMR文件记录了一批源文件以及和每个源文件有关系的可执行模块。生成一个完整的SMR文件需要源文件列表与ARF文件两个要素，源文件列表可以使用“目录文件列表”功能来生成，ARF文件则来源于前两页分析保存而来的结果，两者的关系则通过本界面中的“填充”功能来实现。

- SMR文件操作：此按钮包括系列菜单项，处理和SMR文件的相关操作。

  - 编辑SMR文件：打开一个已经存在的SMR文件供编辑。
  - 关闭SMR文件：正在编辑一SMR文件时，此菜单项可关闭SMR文件的编辑。如需要保存则关闭前需要先点击“保存SMR文件”。
  - 新建SMR文件：新建一空的SMR文件供编辑。
  - 从目录列表新建SMR文件：打开一目录文件列表的文本文件，并基于此文件列表生成一SMR文件供编辑。这个功能在新建SMR时较常用，可省掉手工输入源文件路径名的麻烦。

- ARF文件操作：此按钮包括系列菜单项，处理和ARF文件的相关操作。

  - 手工选择ARF文件：打开一已经存在的ARF文件，供填充。
  - 关闭ARF文件：打开了一ARF文件后，此菜单项可关闭ARF文件。

- 自动填充数据：当SMR文件中源文件列表已准备，ARF文件也打开后，本菜单项中的功能可自动填充构建完整源文件路径名和可执行模块的关系。这种填充的基础是ARF中已经记录了的源文件名和模块名的关系。它根据ARF中的文件名查找到SMR中源文件列表中的带路径信息的文件名，从而构建出完整文件名与可执行模块的关系。 需要说明的是，如果文件名列表中存在文件名相同而路径不同的情况，根据ARF填充时可能会发生错误，此时需要用户手工进行调整以选择某源文件具体对应的可执行模块。

  - 填充选中的源码模块关系：源文件列表中选中了一条源文件记录后，可根据文件名去ARF里头查找对应关联模块，得到此文件对应的可执行模块信息。
  - 填充所有源码模块关系：在ARF中逐个查找源文件列表中的所有文件名并和可执行模块建立联系。

- 保存SMR文件：SMR文件被填充完毕后，记录了具体文件与模块关系的内容便可保存成SMR文件供日后打开查看。

- 数据库浏览按钮：SMR文件的源文件列表是作为数据库记录存在于本程序中的，因此可以通过这些按钮对源文件记录进行操作，如新增一源文件、修改源文件路径、删除无用的源文件等。

- 仅实现部分改动时受影响的可执行模块：此列表针对一源文件而言，列出的是直接包含该单元的可执行模块。

- interface 部分改动时受影响的可执行模块：此列表也是针对一源文件而言，列出的是直接用到“所有包含该单元的模块”的模块。对于bpl来说，如果一个单元的interface没有变化，那么Build时不需要重新编译使用到该bpl的可执行模块。而如果interface有了变化，所有直接依赖该bpl的可执行模块都需要重新编译。 所以，如果一个单元发生了变化，只是在实现部分有代码变化，那么所有把该单元编译进来的可执行模块就是受影响的模块，因为这些模块需要重新编译才能确保新的代码生效。而如果接口部分发了变化，那么除了把该单元编译进来的可执行模块之外，所有直接依赖编译了该单元的可执行模块的模块也都需要重新编译。

查看源码模块关系

SMR文件保存后，此页中可打开已存在的SMR文件进行查看，界面和上一页类似，如下图：

- 打开SMR文件：手工打开一SMR文件供查看。

- 清空：清空显示的内容。

- 上一屏：上一屏用于回退到上一个查看过的文件。

- 下一屏：通过上一屏回退后，下一屏可前进到曾查看过的模块。

查看界面与编辑SMR文件类似，此处不重复说明。

目录文件列表

目录文件列表功能用于根据一目录中的源文件生成一份源文件列表的文本文件供编辑SMR文件时使用，其界面如图所示，左面是查找得到的目录文件树列表，右面是生成的文件列表文本，最终需要保存的是右面的文件列表文本。

- 目录：浏览并选择一目录作为根目录，供枚举其下的文件。

- 包含子目录：查找枚举时是否递归查找其子目录。

- 使用相对路径：查找出的文件名使用相对于选择的根目录的相对路径。

- 文件名过滤：查找中使用的文件名通配符，避免查找到无用的文件。

- 区分大小写：使用通配符进行文件名匹配时是否区分大小写。

- 查找：根据选择的目录和选项，对其目录进行查找枚举。

- 生成列表：左面的目录文件树列表显示了搜索结果后，可点击此按钮在右面的文件列表中生成文件列表文本。如果“自动更新列表”的复选框被勾选了则无需手工点击此按钮，目录文件树内容改变后会自动更新文件列表。

- 列出目录：文件列表中是否列出目录名，默认可不需要。

- 列出文件：文件列表中是否列出文件名，默认需要。

- 自动更新列表：是否在目录文件树内容改变后自动更新文件列表文本，如未勾选，则需要手工点击“生成列表”按钮来生成。

- 保存：保存生成的文件列表文本。

右键点击目录文件树可对目录文件树的内容进行系列操作。需要说明的是这些操作都不影响磁盘上的文件，只影响此处的列表内容与生成的文件列表文本。

本帮助文档中的抓图是本工具对Delphi 5的可执行文件以及其自带的VCL源码所分析的结果，用户可借此进行体验。

相关主题

CnPack 许可协议

关于 CnPack

(C)版权所有 2001-2025 CnPack 开发组