2009-08-27 44 views
4

有沒有什麼辦法可以調試我的.NET代碼通過dllimport調用非託管dll函數後發生了什麼?有沒有什麼辦法可以調試我的.NET代碼通過dllimport調用非託管dll函數後發生了什麼?

我在非託管通過dllimport內公開dll函數。當我在代碼中調用一個函數時,會發生一些事情,並且它永遠不會返回。

有什麼我可以做的,也許有調試視圖或任何獲得任何信息?或者我是SOL?

+0

你有源代碼的DLL嗎?或者它是.pdb? – 2009-08-27 02:38:11

+0

在這種情況下,我既沒有。 – Matt 2009-08-27 03:19:05

回答

6

對於初學者來說,確保在項目屬性的Debug選項卡中啓用了本地代碼調試。

如果您有要調用的DLL的源代碼,那麼您應該能夠進行設置,以便您可以像託管代碼一樣進入本機DLL。最簡單的方法是在同一解決方案中添加本機DLL的源代碼,然後鏈接到該項目的輸出。您需要確保Visual Studio在運行C#應用程序時可以訪問本機DLL和該DLL的pdb。

如果你沒有DLL的源代碼,那麼我建議在調用本地方法之前設置一個斷點。然後,讓程序繼續並在一兩秒鐘後手動暫停程序。確保您仍在查看調用本機DLL的同一線程,然後查看調用堆棧查看器。如果您看到一行標有「[外部代碼]」的行,請確保在上下文菜單中選中「顯示外部代碼」。當選中該選項時,調用堆棧可能會告訴您當前正在執行哪種方法。文本將呈灰色,表示該方法位於外部DLL中。如果您正在進行Windows方法調用,那麼首先安裝Windows符號文件可能允許調試器爲您提供更多信息(http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx)。您也可以暫停並繼續調試器多次,以查看調試堆棧在各個執行點的外觀。從這些信息中,您可能能夠了解發生了什麼問題。

另外,嘗試傳遞不同的參數,從最微不足道的情況開始,看看是否得到相同的行爲。最後,請確保您擁有所有編組元數據正確。

+0

完全答案謝謝! – Matt 2009-08-27 04:39:44

相關問題