2017-01-16 63 views
0

我不知道如何調試COM ATL C++進程外的exe服務器與Visual Studio 2015年如何調試COM C++ Out of Process Server? (客戶端:Excel中VBA)

對於COM ATL DLL是沒有問題的,斷點會自動觸發時我打電話給COM DLL。但是,當我嘗試調試EXE服務器時,調試器沒有中斷。事實上,exe服務器僅在需求時加載,並且客戶端啓動時不加載exe服務器的調試符號。

我的調用COM服務器的客戶端是Excel VBA(我已經通過Tools/References在VBA編輯器中添加了對com的引用)。爲了調試它,我將路徑設置爲Visual Studio Debug命令中的Excel.exe,並將參數設置爲我的xlsm文件的路徑。然後,我只是在Excel中調用VBA代碼。它適用於com DLL,但不適用於COM Exe。我也試着把VS附加到Excel中,但它不起作用。

我找到了這篇文章(Windows COM - how to debug a COM server),看起來這是由高程/權限問題引起的,但我嘗試了建議的答案,但它沒有奏效。

有沒有人可以幫助我呢?

如何調試進程外com服務器?

是否有必要將調試器附加到使用EXE服務器的客戶端(所以在我的情況下爲Excel)?

回答

2

試圖調試EXE服務器很棘手。

我會做的是修改註冊表,以便在加載時提示您調試EXE。

這裏是用來修改註冊表導出.reg文件的內容:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\YourExeName.exe] 
"debugger"="vsjitdebugger.exe" 

變化YourExeName.exe到更有用的東西......

當你的EXE服務器啓動時,你會被提示啓動一個調試器或從當前正在運行的調試器實例上附加。已經有一個調試器運行速度越來越快...當我說「調試器」時,運行的Visual Studio實例很好。

嘗試調試EXE服務器時出現的一個問題是,當您設置斷點並逐句通過代碼時,可能會超出COM超時,然後調用您的進程的EXE客戶端由於超時而失敗,並且會只是繼續執行。當一切都在進行時,這不是一個問題。對於EXE,在您認爲可能有問題的地區在調試版本中有更多的TRACE語句可能會有所幫助。

這不是嚴格需要附加到客戶端進程。有時它是有用的,有時不是。如果你有源代碼給調用客戶端進程,顯然要容易得多。

+1

我這樣做完成調試時的一個訣竅就是進入註冊表並在註冊表項前加下劃線,如下所示:_YourExeName.exe。 它做兩件事... 1)停止提示調試器,2)如果我想再次調試EXE,它更容易找到,因爲它是第一個列在圖像文件執行選項鍵,我可以刪除下劃線以這種方式返回調試。 –

+0

它的工作非常感謝喬,問題解決了!你剛剛救了我的一天:)網上幾乎沒有關於它的信息,你的回答是,迄今爲止,我讀過的最好的信息:)也謝謝你的訣竅。對於其他人:按照這個答案,只需要跳過對'/ RegServer'調用對應的調試器的第一個調用。只需構建COM服務器,跳過對JIT調試器的第一次調用,運行客戶端,調用服務器時就會彈出調試器。太好了,請注意超時問題 – Malick