2009-07-29 78 views
2

我有一個本地C Dll,它調用'LoadLibrary'來加載另一個啓用了/ clr標誌的Dll。然後我使用'GetProcAddress'來獲得一個函數,並在動態加載的DLL上調用它。我想在調試器中進入動態庫,但符號不會加載。任何想法?本機C /託管C++調試

而且,我也要我使用Visual Studio 2008的

更新紛紛表示:由於以下一些技巧,我改變了項目調試混合。它沒有工作,但我想我知道爲什麼。我正在開發一個插件到現有的應用程序。我連接的應用程序啓動一個exe,然後開始另一個。所以我必須使用「附加到進程」來啓動調試器。我的猜測是啓動調試器的方式將默認爲「自動」。 有沒有辦法改變VS的默認行爲來使用「混合」調試?

回答

4

這是從VS2008,但如果我沒有記錯VS2005是類似的。在本地項目的屬性中,在「配置屬性 - >調試」下,有一個「調試器類型」,默認設置爲「自動」。您需要將其更改爲「混合」,因爲VS不夠智能,無法實現您需要進行託管調試

1

我在Visual Studio中做過類似的事情有過混合的經歷。您可以考慮使用ProcMon來查看VisualStudio在哪裏查找PDB文件。或者,您可以嘗試使用WinDbg。它似乎在加載符號方面做得更好,如果不符合,您可以自己顯式加載它們。使用WinDbg涉及到一個陡峭的學習曲線,但如果你現在正在燃燒時間,這不值得嗎?

您也可以自行運行該exe文件,並從受管dll的源文件中,附加到該進程以對其進行調試。

1

修改混合模式的dll,在它輸入您想要調試的第一個代碼時拋出一個CLR異常。這應該讓您有機會啓動託管調試器。

1

在VS2005中,有每個項目選項可以分別啓用本機和CLR調試器。您可能需要爲啓動調試器的本機dll項目啓用CLR調試器。