首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Delphi 7 調試 COM+ 組件實戰指南:在 IDE 中直接斷點診斷伺服器端代碼

     編輯:更多程式設計知識

COM+ 組件運行於獨立的 COM+ 執行環境 (dllhost.exe) 中,導致開發者無法像調試普通 DataSnap 應用伺服器那樣,直接在 Delphi IDE 內對伺服器端代碼設置斷點。然而,透過正確配置,Delphi 7 完全能夠實現「IDE 內斷點、客戶端觸發、伺服器端代碼暫停」的無縫調試體驗。本文詳述完整配置步驟與核心原理。

核心原理:偵錯器注入機制

Windows 2000/XP 的組件服務支援「在偵錯器中啟動」選項。當啟用後,COM+ 應用程式啟動時不再直接載入 dllhost.exe,而是透過 Borland 偵錯器 bordbg70.exe 啟動宿主進程,使 Delphi IDE 能攔截進程並建立調試上下文。

分步配置指南(Delphi 7 + Windows 2000/XP)

1. 專案連結器設置:生成調試符號

Project → Options → Linker
☑ Include TD32 debug info
☑ Include remote debug symbols

確保編譯輸出包含完整偵錯資訊,否則斷點無法命中。

2. 註冊 COM+ 組件至新應用程式

Run → Install COM+ Objects

建議註冊到「新應用程式」,避免現有應用程式權限/隔離級別干擾。若必須用現有應用,確保其由 Delphi 註冊工具生成。

3. 組件服務啟用「在偵錯器中啟動」

  1. 開啟 控制台 → 管理工具 → 組件服務
  2. 展開 元件服務 → 電腦 → 我的電腦 → COM+ 應用程式
  3. 右鍵目標應用程式 → 內容 → 進階 頁籤
  4. 勾選 在偵錯器中啟動
  5. 複製「偵錯路徑」中的 GUID 值,格式如:
    "C:\Program Files\Borland\Delphi7\Bin\bordbg70.exe" dllhost.exe /ProcessID:{9CEC476D-83A5-4C2B-AFF1-3E83A147B866}

4. Delphi IDE 運行參數綁定宿主進程

Run → Parameters
Host Application: C:\WINNT\system32\dllhost.exe   (視 OS 安裝路徑調整)
Parameters: /ProcessID:{9CEC476D-83A5-4C2B-AFF1-3E83A147B866}   (貼上步驟 3 複製的 GUID)

關鍵點: GUID 必須與組件服務屬性中完全一致,大小寫敏感。

5. 設置斷點並啟動調試

  1. 在 COM+ 組件實作單元 (`.pas`) 中設置斷點
  2. IDE 按 F9 (Run) —— 輸出視窗顯示「Process started」,IDE 進入等待狀態
  3. 另開一個 Delphi 實例或直接運行客戶端程式呼叫該 COM+ 組件
  4. IDE 自動中斷於斷點,進入單步調試模式

常見問題排查

現象可能原因解決方案
斷點顯示「無效」或未命中未勾選 Linker 調試選項 / GUID 不匹配 / 組件未重新註冊重新編譯、核對 GUID、重新 Install COM+ Objects
IDE 無法啟動 dllhost.exeHost Application 路徑錯誤 / 權限不足以系統管理員身份運行 Delphi 7;確認 dllhost.exe 實際路徑
調試後無法再次啟動上一輪 dllhost.exe 殘留進程工作管理員結束所有 dllhost.exe 再試

進階技巧:多實例並發調試

若 COM+ 應用程式設定為「伺服器應用程式」且池化大小 > 1,多客戶端並發調用會啟動多個 dllhost.exe。此時可在 IDE 中多次按 F9 掛載多個進程,或使用 Run → Attach to Process 手動選擇目標進程。

總結

通過「連結器調試符號 + 組件服務偵錯器啟動 + IDE 參數綁定」三步聯動,Delphi 7 開發者即可跨越進程邊界,在熟悉的 IDE 環境中高效診斷 COM+ 伺服器端邏輯。此技巧同樣適用於後續 Delphi 版本 (2005~11 Alexandria),僅需對應 bordbgXX.exe 版本號即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved