簡體   English   中英

從Visual Studio 2008中的C#應用​​程序調用時如何調試C DLL

[英]How to debug C DLL when called from a C# application in Visual Studio 2008

我有一個C#窗口應用程序,該應用程序需要使用僅在C中提供的第三方API。為解決此問題,我在VS2008中創建了三個項目:兩個C#項目和一個空的C ++項目。 我的“包裝器”項目是一個C#項目,僅負責產生調用C DLL的托管代碼。 另一個C#項目是窗口應用程序,它使用Wrapper項目。 我們稱之為GUI項目。

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

我的C ++項目具有一個生成后事件,該事件會將生成的DLL復制到我的GUI C#項目的輸出目錄中,以便在執行時將其提取。 這感覺有些嚴峻,但這是我弄清楚如何做到這一點的唯一方法。 我的GUI項目依賴於我的Wrapper項目,而后者依賴於C ++項目。

但是,我要做的是調試(即逐步執行)我的C項目代碼。 我試圖在C代碼中設置一個斷點,希望當我的C#代碼執行相關功能時會發現該斷點。 不幸的是,一旦我運行C#應用程序,IDE便警告我永遠不會執行C斷點:“ 尚未為該文檔加載任何符號 。”

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

  • 確保.pdb文件具有與DLL文件相同的時間戳。 Google隨機提示此錯誤可能導致“無符號”錯誤之后,才遵循此提示。

  • 我在兩個C#項目屬性中都選擇了“啟用非托管代碼調試”。

  • 我曾嘗試在調用DLL方法之一之前在C#調用中設置斷點,然后嘗試進入DLL。 這也不起作用,它只是跨過了功能。

您應該檢查模塊列表(通常在Visual Studio的“調試”菜單中找到),以確保:

  • 模塊已加載
  • 正在從正確的位置加載
  • 符號已正確加載

如果窗口列出了模塊,但是指示未加載符號,則可以通過右鍵單擊模塊並選擇“加載符號”來強制VS加載符號。 如果無法自動找到它們,則會提示您輸入路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM