2012-12-20 122 views
7

我有一個C++解決方案。啓動項目是一個exe。在該解決方案中,有許多C#dll(針對.NET Framework 2.0)爲COM互操作註冊。當我在C#代碼中放置一個斷點時,我得到了空心紅色斷點"No native symbols in symbol file"通過COM從C++解決方案調試C#dll

我已經嘗試在調用COM方法的啓動項目上將Project Property Pages -> Debugging -> Debugger Type設置爲Mixed。

我已檢查Debug -> Windows -> Modules。它加載了我的dll,符號狀態爲"No native symbols in symbol file"

這不是世界末日,因爲如果我做Debug -> Start Without Debugging然後Debug -> Attach to Process,將Attach To:更改爲Managed (v2.0, v1.1, v1.0) code, Native code。然後我在C++代碼和C#代碼中都達到了斷點。

所以我有我的解決方法,但我認爲如果我可以通過附加到過程來做到這一點 - 我應該可以通過調試來完成。

如何通過只做Debug -> Start Debugging來打我的C#斷點?

+0

懷疑,有一個可行的辦法,我想一樣的,花了幾個小時試圖做的,現在終於如願以償堅持使用附加到進程的正常工作。 – SinisterMJ

+0

公平,我沒有問題,使用附加處理它,只是其中一件事情,你不能離開它,因爲你認爲「肯定肯定有辦法」 – Liam

+1

我也有這個問題,我猜根本問題在於「混合」選擇本機+託管(v4.0),因此無法從啓動設置中選擇本機+託管(v2.0)。 –

回答

1

我不確定這是否會有所幫助,但我們會用C#和C++進行很多工作。通過將C++項目和C#項目放在同一個解決方案中,並在C#項目中啓用「本地調試」,我發現這是可能的。然後我可以在調試時在它們之間來回跳動。

+0

我在同一個解決方案和VS2010中都有兩個項目我已經在所有C#項目中設置了「啓用非託管代碼調試」。它仍然不起作用。我假設作爲啓動項目是一個C++ EXE,儘管我在C++項目屬性中將調試器類型設置爲混合,調試器仍設置爲本機。 – Liam

4

我能夠做從C++項目調試我的C#DLL在VS2008如下:

在C++項目的屬性,轉到配置屬性 - >調試。將「調試器類型」設置爲混合。 「附加」應設置爲No.

在C#項目屬性的「調試」選項卡中,將「啓動外部程序」設置爲C++項目的可執行文件。

+1

適合我!謝謝! –

2

我知道這有點舊,但我找到了一個實用的解決方案。

我在使用使用C#COM對象的C++應用程序時遇到同樣的問題。我在C++和C#端的Visual Studio中嘗試了幾個設置。除非我嘗試手動啓動調試器,否則沒有任何幫助。

您可以使用

Debugger.Launch(); 

手動啓動你的C#DLL的調試器。我知道這不是最好的,而是一種實用的方法。在稍後的高效環境中,您必須刪除Debugger啓動功能:)。

問候

相關問題