源碼模塊關係分析工具使用說明

歡迎您使用 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-2015 CnPack 開發組