2012-12-28 119 views
5

我已經創建了一個visual c++ 6.0 dll項目並使用它從我的c#代碼。現在我想調試dll,但我無法做到這一點。如何從C#項目調試C++ dll?

我選擇下列選項來做到這一點:

  • 把突破點在我visual c++項目代碼。
  • 構建dll並將其複製到我的c#項目的目錄中。
  • 現在我建立我的c#項目和DLL工作正常(方法正在呼籲完美)。
  • 現在我想調試dll
  • 我關注博客並打開c++項目,並從vc++中選擇Attach to process
  • 但我無法找到visual c#項目的運行過程,而它在任務管理器進程中可用。

在我c#項目解決方案我有兩個項目,即

  • web服務(我叫在訪問某個網址時的dll方法)
  • 另一個是webform application這將啓動Web服務。

現在請幫助我如何調試我的dll。我已經關注了這麼多的博客,但他們都在關注Attaching process方法,這種方法不適合我的情況。我該怎麼辦?

回答

9

您需要啓用非託管調試,因爲您的主程序是託管的,所以在任一情況下都不會默認打開它。

你可以在你的C#項目中使用Project> Properties> Debug選項卡>勾選「啓用非託管代碼調試」複選框。

您可以通過單擊選擇按鈕來執行工具>附加到過程。選擇「調試這些代碼類型」單選按鈕並勾選託管和本機。如果您的進程是64位,您可能不得不求助於本機。

在DLL的源代碼中設置一個斷點,並確保編寫用於執行DLL函數的C#代碼。如果您仍然無法獲得斷點,請使用Debug> Windows> Modules並確認您在模塊列表中看到了該DLL。通過右鍵單擊獲取其他疑難解答信息,選擇符號加載信息。其中顯示了調試器查找PDB文件的位置。

+0

我試圖unmanaged調試,但正如我所說,我有一個Web服務項目和formapplication在我的解決方案。我在第二個項目中啓用了它,但在第一個項目 –

+0

中未找到任何此類選項。請訪問:https://dl.dropbox.com/u/20476478/Untitled。png –

+0

如果您不介意,我們可以聊聊5分鐘嗎? –

0

您可以將C++項目添加到您的C#解決方案中,並直接向項目添加引用(而不是dll),那麼您將不需要複製DLL。之後,只需開始C#項目的正常調試(F5),並且斷點也將用於C++項目。這種方式將非常適合調試。我試過這樣的調試,並沒有改變任何其他設置。

+0

但要做到這一點,我必須改變在C#項目編寫的所有代碼流 –

+0

我不知道爲什麼你需要改變這個代碼流,你只需要改變項目引用的DLL引用。或者我想念什麼? – SergeyS

+0

是的,有問題,因爲我有一個'.lib'與Visual C++項目相關聯 –