2012-10-30 108 views
3

我有一個用C++編寫的DLL。它包裝一個靜態庫。我使用ctypes從python中調用它。到現在爲止還挺好。我需要調試DLL中的一些調用。我可以在靜態庫中創建斷點,但不是DLL。我通過使用「調試」菜單中的「附加到進程」來完成此操作。代碼如下所示:C++ DLL調試

extern "C" 
{ 
    __declspec(dllexport) 
    void foo() 
    { 
    int i = 0; // Can't hit breakpoint here 
    } 
} 

我正在生成調試信息。 pdb坐在DLL的旁邊。我正在加載DLL我認爲我正在加載。我錯過了什麼?

編輯 我重新創建了該項目。問題消失了。也許差別是我從一個託管的C項目到MFC DLL?

+0

該DLL甚至被加載?調試+ Windows +模塊。如果你看到它,然後右鍵單擊它並查看「符號加載信息」。 –

回答

1

當您使用MS Visual Studio附加到正在運行的進程時,請確保您爲「託管代碼」和「本機代碼」設置了選項。這將確保您的任何類型的代碼,本地或託管,斷點將由MS Visual Studio調試器兌現。否則,MS Visual Studio將使用其「自動」設置,這會導致它只遵守它在其「項目類型」中看到的斷點(例如:MFC項目是本地代碼(unmanged),因此通常不會調試託管的代碼段,而.Net項目是託管代碼,不會打擾停止「非託管」本機代碼中的中斷點。)

您可以在附加時間通過選擇「選擇.. 。「按鈕,並將單選按鈕從」自動「切換到」調試這些代碼類型「。在「調試這些代碼類型」下,選中「託管」和「本機」旁邊的框。如果您使用MS Visual Studio可識別的其他類型(如T-SQL for SQL Server代碼等),則可以選擇更多選項。