2008-09-11 39 views
16

我有一個C#函數調用的包裝,我從C#代碼調用。如何在Visual Studio中附加一個調試器以進入本機C++代碼?如何附加調試程序以從託管(C#)包裝程序進入本地(C++)代碼?

這是調用的GetData我有包裝()是一個C++文件中定義:

[DllImport("Unmanaged.dll", CallingConvention=CallingConvention.Cdecl, 
       EntryPoint = "GetData", BestFitMapping = false)] 
     public static extern String GetData(String url); 

的代碼崩潰和我想要調查的根本原因。

感謝, 尼基爾

回答

22

檢查項目的屬性頁上的調試選項卡。應該有一個「啓用非託管代碼調試」複選框。當我們爲我們的舊C++ DLL開發一個新的.NET UI時,這對我很有用。

如果你的非託管的DLL正在從另一個項目建成(一會兒我們正在使用VS6建)只要確保你有DLL的PDB文件方便的調試。

另一種方法是使用C#EXE爲目標EXE從DLL項目中運行,則可以正常調試您的DLL。

7

除了婁的勸啓動調試器,您可以通過點擊連接到現有的流程時選擇哪些調試發動機均採用「選擇...」中的「附加到進程」對話框中,選擇這兩個「管理代碼「和」本地代碼「。以這種方式

調試稱之爲混合模式調試。有關提示,請參閱此blog post

我認爲這是不支持64個進程...雖然會愛錯了這一點。

+0

感謝您的跟進。我不傾向於使用「附加處理」,所以我忘記了這是另一種選擇。乾杯。 – Lou 2008-09-11 23:13:34

2

要使用WinDbg的任何一個:

1>設置符號

看看這些命令。 (幫助:在控制檯.hh <命令>)

.sympath 
.sympath+ 
.symfix 

2>設置源路徑

.srcpath 

3>裝入SOS extention調試管理/混合模式的程序。

(請確保您有正確extention路徑設置)

添加Microsoft.NET \框架\ V2.0.50727用於x86 using-

.extpath 

設置爲CLR加載一個斷點。

sxe ld:mscorwks 

(F5/G) (等待ModLoad BP上的Mscorwks.dll)

確保你沒有一個重複的SOS extention已經加載。參見:

.chain 

現在我們準備加載sos擴展。:)

.loadby sos mscorwks 

4>刷新所有符號..

.reload 

現在,你都設置:)

(因人而異)

2

混合調試不支持64位模式(從Visual Studio 2008開始)。

+0

你能發表你對這個主題可能有的任何文章嗎? – Kyle 2010-05-28 19:23:24

相關問題