2012-04-18 64 views
3

我使用Visual Studio 2010來調試主要是用C編寫的正常情況下,應用程序,我可以附加調試得很好,但我在一些問題上運行當我鏈接到用C++/CLI編寫的庫時。調試用C++是C可執行 - CLI庫編譯/ CLR

如果我編譯與/clr標誌(我最終將不得不爲此做尚未不成文庫)的庫,然後我失去了調試整個C應用程序的所有功能,甚至什麼都沒有做的部分圖書館電話。我得到了帶有黃色三角形和感嘆號的空圈,其中有一個紅色的斷點圓應該是。將鼠標懸停在它上面只能提供一個工具提示:「斷點當前不會被觸發,沒有可執行代碼與此行關聯,可能的原因包括:條件編譯或編譯器優化。」

然後,如果我鏈接完全相同的庫編譯沒有/clr標誌,我再次能夠調試我的應用程序。

據我所知,Visual Studio將不太可能能夠調試用C++/CLI庫,那就是確定。我只想保留調試應用程序其餘部分的功能,並且至少可以查看我對外部庫調用的結果。

另一個複雜的因素是該項目不是由visual studio構建的。它使用一個使用cl的外部make系統編譯,所以我可以自定義任何需要以這種方式發佈到編譯器的命令。

有沒有人知道爲什麼我目前不能按照我想要的方式調試庫?任何建議如何我可以?

回答

9

您必須選擇調試器的那種當你連接。請注意對話框中的「附加到」標籤。按下Select按鈕並勾選「Native」以獲得對調試本機代碼的支持。在你的任何斷點可以命中之前,DLL也需要被加載。如果您不確定是否已經完成,請在Debug> Windows> Modules debugger窗口中查看加載的DLL。只要調試器看到DLL加載並設置斷點,斷點指示器便會從空心變爲紅色。

調試C++/CLI的支持,否則,你可以勾選無論是「託管」和「天然」複選框。並在任何一種代碼中設置斷點。唯一不支持的是從託管代碼到本地代碼的單步執行以及後退。需要模式切換來激活正確的調試引擎,這需要代碼打到一個斷點。

,考慮你本地項目的調試選項,你可以指定一個EXE啓動。所以你可以簡單地按下F5開始調試並跳過附加的麻煩。

+0

非常感謝您的回答。就是這樣。我從來沒有意識到有不同類型的調試器。 – Drewmate 2012-04-18 20:30:56

3

它也可能與調試類型做! (但是這取決於您的具體建築結構,對此,我不知道夠不夠)如果您的項目與公共語言運行庫支持(/ CLR),你應該設置在啓動項目的調試器類型符合

「混合」,因爲默認設置「自動」可能會失敗!

試想一下,你有兩個項目:

1)非CLR C++項目,這是產生一些.exe文件的啓動項目。

2)一個C++項目,它生成mylibrary.dll,它與Common Language Runtime Support一起編譯,因爲它使用了一些託管代碼。第一個項目的.exe文件調用mylibrary.dll。

如果您啓動的第一個項目的調試器類型設置爲其默認值「自動」,您將能夠調試到第一個項目,但不能到第二個。調試器選擇器沒有意識到您將調用CLR庫。

因此,將項目屬性 - >配置屬性 - >調試 - >調試器類型設置爲「混合」!