2012-02-27 62 views
1

代碼裏面有從我打電話從C++的一些函數/變量C#程序。 C++程序本身運行良好,並進行檢查。但是,當我構建這個DLL並將它用於C#時,接口代碼中存在一些阻止我在C#中獲得正確結果的錯誤。我如何調試DLL

最有可能,有出口變量/導出函數給出來的結果,我要檢查一些錯誤。

我的主要問題是:如何通過把斷點等,並沿看到的結果如下,我們可以爲任何其他程序做調試這個DLL,如?

回答

2

假設您具有本機(C++)DLL的源代碼和調試符號,可以在託管(C#)EXE項目的「調試」選項卡上選中「啓用非託管代碼調試」選項,然後設置斷點像往常一樣在C++代碼中檢查變量等。您可以將C++項目添加到解決方案,或者只需打開一個C++源代碼文件並在那裏設置斷點。

+0

我的C++項目在解決方案中,並設置了所有的斷點。我在C#exe項目中的Debug Tab下勾選了'Enable Unmanaged code debugging option',但是當我開始調試時C++中的斷點被禁用了(並且懸停在它們上面,工具提示信息是:'斷點不會被命中。已加載此文檔「) – Cipher 2012-02-27 10:43:13

+0

其實是的!這工作!謝謝 – Cipher 2012-02-27 10:45:27

1

如果你想調試DLL,你應該在你的C++環境中工作,把斷點放在你的C++代碼中,但是使用由c#生成的可執行文件。

0

調試這種情況下的最佳方法,是通過使用Visual Studio混合模式調試或者(經由devenv的/ debugexe yourapp.name.exe命令),或者使用的Windbg + SOS擴展(陡峭的學習曲線,但是這會表現出更多的信息,比如你鍵入本地的大小和託管代碼) 要了解如何使用WinDbg + SOS,請參閱高級.NET調試由馬里奧·赫沃特

注意,往往這些類型的問題所引起通過 1)錯誤地選擇C#數據類型以與C++ API一起使用 2)錯誤地指定/未指定的函數調用約定 http://blogs.msdn.com/b/adam_nathan/archive/2003/05/21/56690.aspx