2010-09-06 64 views
1

我已經寫了一個COM可見的dll,這將從本機的Win32程序調用。爲了調試目的,我添加了一個簡單的WinForms客戶端到包含dll的解決方案。調試COM可見的dll託管代碼

現在,當我在dll中設置斷點時,該斷點被命中,但我無法逐句通過代碼:調試器總是跳轉到dll中的下一個斷點,或者客戶端中的第一行代碼在對dll的調用之後。

我該如何讓調試器步驟通過dll代碼?

我認爲這可能是「啓用只是我的代碼」選項,但沒有設置。

更新 JDV建議設置在項目屬性「啓用非託管代碼調試」,但並沒有收到預期的效果。

謝謝,米爾。

+0

鏈接:http://stackoverflow.com/questions/2026510/visual-studio-debugger-skips-over-breakpoints – 2010-09-11 18:49:36

+0

@hans:這個伎倆。如果你把你的評論變成真實的答案,你會得到獎勵。讓我們不要讓它走到腰部。 – Miel 2010-09-13 07:27:16

回答

1

有一個發佈的VS2008 SP1修復程序,解決了一些調試問題。知識庫文章is here,修補程序下載is here

3

下面是我執行,並且其中所述步驟允許我成功地調試暴露爲COM組件.NET組件:

開始通過創建包含將被公開爲COM對象類的類庫:

namespace COMTest 
{ 
    using System; 
    using System.Runtime.InteropServices; 

    public interface IFoo 
    { 
     void Bar(); 
    } 

    [ComVisible(true)] 
    public class Foo : IFoo 
    { 
     public void Bar() 
     { 
      Console.WriteLine("Bar"); 
     } 
    } 
} 

Sign the assembly用強密鑰並註冊爲COM對象:

regasm.exe /codebase COMTest.dll 

一旦COM對象被註冊,您可以CRE吃了一個新的Visual Studio實例一個新的控制檯應用程序來測試COM對象:

class Program 
{ 
    static void Main() 
    { 
     var type = Type.GetTypeFromProgID("COMTest.Foo"); 
     var instance = Activator.CreateInstance(type); 
     type.InvokeMember("Bar", BindingFlags.InvokeMethod, null, instance, new object[0]); 
    } 
} 

放在InvokeMember行斷點和運行應用程序。一旦命中斷點打開Modules Window按Ctrl + DM),並確保符號已加載的COM組件:

alt text

現在,如果你按F11可以步入COM類來調試。

備註:您也可以直接打開包含Foo類的.cs文件,並直接在其中放置斷點。再次重要的是要爲程序集加載符號,或者當您放置斷點時,Visual Studio會告訴您這個斷點不會被擊中。

+0

這可能不適用於Express版本的VS. – user7116 2010-09-10 20:05:23

+0

+ 1爲如何做到這一點提供了一個很好的教程。 – Miel 2010-09-13 07:28:18

相關問題