2010-10-13 64 views
2

我有一個C#窗口應用程序,需要使用僅在C中提供的第三方API。爲了解決此問題,我在VS2008中創建了三個項目:兩個C#項目和一個空的C++項目。一個C#項目是我的「Wrapper」項目,僅負責生成調用C DLL的託管代碼。另一個C#項目是窗口化的應用程序,它使用了Wrapper項目;我們稱之爲GUI項目。如何在從Visual Studio 2008中的C#應用​​程序調用時調試C DLL

在C++項目中,我創建了幾個使用第三方API和導出(dllexport)適當函數的C文件(* .c)。我可以成功地將這個項目編譯成一個DLL,並且在從我的Wrapper項目中調用這些函數時沒有任何問題。如果它是相關的,我的Wrapper項目使用DllImport屬性來引用這些函數。

我的C++項目有一個生成後事件,它將生成的DLL複製到我的GUI C#項目的輸出目錄中,以便它在執行時被拾取。這感覺有點嚴峻,但這是我想出如何做到這一點的唯一方法。我的GUI項目依賴於我的Wrapper項目,它依賴於C++項目。

然而,我正在努力做的是調試(即逐步)我的C項目代碼。我試圖在C代碼中設置一個斷點,希望它能在我的C#代碼執行相關函數時被捕獲。不幸的是,一旦我運行我的C#應用​​程序,IDE就會警告我將永遠不會執行C斷點:「沒有爲此文檔加載符號。」

任何幫助,這將不勝感激。這裏有一些我玩過的東西,但無濟於事:

  • 確保.pdb文件具有與DLL文件相同的時間戳。這個提示之後,隨機谷歌建議「無符號」錯誤可能是由此造成的。

  • 我在C#項目屬性中選擇了「啓用非託管代碼調試」。

  • 我已經嘗試在調用其中一個DLL方法之前在我的C#調用中設置一個斷點,並試圖進入DLL。這也不起作用,它只是跨過了功能。

+0

你的意思是.pdb文件不是.pcb – 2010-10-13 07:45:11

+0

我當然可以,已經編輯過。謝謝。 – 2010-10-13 07:49:36

+0

您是否嘗試加入C函數?它一直爲我工作。 – leppie 2010-10-13 07:51:08

回答

0

您應該檢查模塊列表(在Visual Studio調試菜單通常發現的),以確保:

  • 模塊加載
  • 它被從右側裝入將
  • 的符號已正確放入

如果窗口列出了模塊,但表示符號AR en't加載然後你可以強制VS加載符號通過右擊模塊並選擇「加載符號」。如果它不能自動找到它們,那麼它會提示你尋找路徑。

+0

我們可以在這裏獲勝。模塊列表顯示紅色感嘆號,並警告說二進制文件不是用調試信息構建的。 – 2010-10-13 08:11:29

+0

哎呀,發佈太早。無論如何,我試圖加載符號文件,它警告我它不匹配。我現在有了這種氣味,所以我確信我會隨時解決問題。我會將您標記爲回覆者,因爲您已經向正確的方向發送了我。稍後將回復完整答案。 – 2010-10-13 08:12:21

+0

@Duncan - 聽起來像你需要檢查C++項目的調試信息構建設置。 – Justin 2010-10-13 08:14:25

相關問題