2010-03-26 118 views
4

我有一個C#服務正在調用最初用VC6編寫的C DLL。調試本機代碼

我試圖檢查DLL中有一個錯誤。

經歷了一場惡夢,試圖讓調試工作後,我最終將DLL添加到包含C#服務的VS2005解決方案,並添加了必要的_CRT_SECURE_NO_WARNINGS

使用'installutil.exe'工具註冊服務的調試版本。

我可以讓調試器在通過調用System.Diagnostics.Debugger.Break();進入dll的那一行之前中斷。我在網上找到了一些關於加入調試非託管代碼的指令,並啓用了'啓用非託管代碼調試'複選框,我也嘗試啓用選項 - >調試 - >本機'加載DLL導出'和'啓用RPC調試'(即使它不是COM)。我也已經將debug dll和.pdb複製到與服務相同的bin目錄中。

但是,非託管代碼並沒有進入到我真正需要的地步。

UPDATE:我發現DLL屬性中的調試類型,並根據幾個網站上的建議將其設置爲「混合」,但無濟於事。

UPDATE2:我的項目現在將debug dll和pdb發送到與調試服務相同的目錄。仍然無法調試該DLL。

回答

0

最後,我創建了一個控制檯應用程序,並重新創建所有之前的調用,以確保公正,因爲它沒有在通話將採取行動實際的服務一旦到達那裏就會帶着實際的參數。

我記錄了我的修復和由此產生的代碼my site

2

嘗試將非託管代碼設置爲啓動項目。我知道這是沒有道理的,但我記得這是爲一個非常類似的項目工作。

由於DLL沒有關聯的可執行文件,因此當您嘗試運行時,會彈出詢問要運行的應用程序。瀏覽到你的C#應用​​程序,然後你應該很好去。

快速調試!

編輯:它已經有一段時間,但我認爲混合調試類型是正確的

+0

這是一項服務 - 您無法將應用程序作爲應用程序運行。 – 2010-03-26 11:54:35

+0

呵呵,我在想這個。我對恐懼的服務瞭解不多。如何在沒有DLL問題的情況下調試服務? – 2010-03-26 12:04:55

+0

另外,如果你不能通過任何其他方式獲得這個工作,你可以編寫一個非常簡單的C#應用​​程序來調試DLL。 – 2010-03-26 12:13:09

0

在Visual Studio 2013中有一種解決方法。從cmd行運行應用程序。當命中System.Diagnostics.Debugger.Break();時,彈出一個Visual Studio Just-In-Time Debugger窗口。選中「手動選擇調試引擎」,單擊「是」並確保選中「本機」引擎。點擊「確定」。現在,您應該能夠進入本機代碼,就像通過從VS內運行代碼一樣。