繁体   English   中英

调试com可见的dll托管代码

[英]Debug com visible dll managed code

我已经编写了一个COM可见的dll,它将从本地Win32程序中调用。 为了进行调试,我向包含dll的解决方案中添加了一个简单的WinForms客户端。

现在,当我在dll中设置一个断点时,该断点会被命中,但我无法单步执行代码:调试器始终会跳转到dll中的下一个断点,或者会在调用之后跳转到客户端的第一行代码dll。

如何让调试器逐步执行dll代码?

我以为可能是“启用我的代码”选项,但是未设置。

更新 jdv建议在项目属性中设置“启用非托管代码调试”,但效果不理想。

谢谢,米尔。

以下是我执行的步骤,这些步骤使我能够成功调试作为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");
        }
    }
}

使用强键对程序集进行签名并注册为COM对象:

regasm.exe /codebase COMTest.dll

注册COM对象后,您可以在新的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行上放置一个断点,然后运行该应用程序。 命中断点后,打开“ 模块窗口”Ctrl + DM ),并确保已为COM程序集加载符号:

替代文字

现在,如果按F11键,则可以进入COM类进行调试。

备注:您也可以直接打开包含Foo类的.cs文件,并直接在其中放置一个断点。 再次重要的是要为程序集加载符号,或者当您放置断点时,Visual Studio会告诉您不会遇到此断点。

VS2008 SP1发布了一个修补程序,解决了许多调试问题。 KB文章在这里 ,修补程序下载在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM