COM+ 組件運行於獨立的 COM+ 執行環境 (dllhost.exe) 中,導致開發者無法像調試普通 DataSnap 應用伺服器那樣,直接在 Delphi IDE 內對伺服器端代碼設置斷點。然而,透過正確配置,Delphi 7 完全能夠實現「IDE 內斷點、客戶端觸發、伺服器端代碼暫停」的無縫調試體驗。本文詳述完整配置步驟與核心原理。
Windows 2000/XP 的組件服務支援「在偵錯器中啟動」選項。當啟用後,COM+ 應用程式啟動時不再直接載入 dllhost.exe,而是透過 Borland 偵錯器 bordbg70.exe 啟動宿主進程,使 Delphi IDE 能攔截進程並建立調試上下文。
Project → Options → Linker
☑ Include TD32 debug info
☑ Include remote debug symbols
確保編譯輸出包含完整偵錯資訊,否則斷點無法命中。
Run → Install COM+ Objects
建議註冊到「新應用程式」,避免現有應用程式權限/隔離級別干擾。若必須用現有應用,確保其由 Delphi 註冊工具生成。
"C:\Program Files\Borland\Delphi7\Bin\bordbg70.exe" dllhost.exe /ProcessID:{9CEC476D-83A5-4C2B-AFF1-3E83A147B866}Run → Parameters
Host Application: C:\WINNT\system32\dllhost.exe (視 OS 安裝路徑調整)
Parameters: /ProcessID:{9CEC476D-83A5-4C2B-AFF1-3E83A147B866} (貼上步驟 3 複製的 GUID)
關鍵點: GUID 必須與組件服務屬性中完全一致,大小寫敏感。
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 斷點顯示「無效」或未命中 | 未勾選 Linker 調試選項 / GUID 不匹配 / 組件未重新註冊 | 重新編譯、核對 GUID、重新 Install COM+ Objects |
| IDE 無法啟動 dllhost.exe | Host 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 版本號即可。