Отладка ком видимого DLL-управляемого кода - PullRequest
1 голос
/ 06 сентября 2010

Я написал COM видимый DLL, который будет вызываться из родной программы Win32.В целях отладки я добавил простой клиент WinForms в решение, содержащее dll.

Теперь, когда я устанавливаю точку останова в dll, эта точка останова срабатывает, но я не могу пройти по коду: отладчик всегдапереходит к следующей точке останова в dll или к первой строке кода в клиенте после вызова dll.

Как я могу получить отладчик для пошагового выполнения кода dll?

Я подумал, что это может быть опция «Включить только мой код», но она не установлена.

Обновление JDV предложил установить «включить отладку неуправляемого кода» в свойствах проекта, но это не такне дает желаемого эффекта.

Спасибо, Миэль.

Ответы [ 2 ]

4 голосов
/ 10 сентября 2010

Вот шаги, которые я выполнил и которые позволили мне успешно отладить сборку .NET, представленную как компонент COM:

Начните с создания библиотеки классов, содержащей класс, который будет представлен как объект 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:

alt text

Теперь, если вы нажмете F11 , вы сможете перейти в класс COM для отладки.

Примечание: Вы также можете напрямую открыть файл .cs, содержащий класс Foo, и напрямуюустановите точку останова там.Еще раз важно, чтобы символы загружались для сборки или когда вы устанавливали точку останова, Visual Studio сообщит вам, что эта точка останова не будет достигнута.

1 голос
/ 13 сентября 2010

Было выпущено исправление VS2008 SP1, которое решает ряд проблем отладки. Статья базы знаний здесь , загрузка исправления здесь .

...