Как отладить библиотеку классов, которая вызывается из внешнего приложения?

существует внешний рабочий процесс, который выполняет скрипты C# и может работать с DLL-файлами(моя библиотека классов).

можно ли прикрепить debug к моему проекту библиотеки классов, чтобы точка останова ударила, как только этот WF вызовет его?

спасибо

4 ответов


Да, это можно сделать с помощью Visual Studio. У вас есть два варианта:

настройки проекта для запуска внешней программы

  1. откройте проект DLL.

  2. в свойствах проекта перейдите в Debug tab.

  3. выбрать запуск внешней программы и укажите путь внешней программы, которая вызовет вашу DLL, вместе с любыми аргументами командной строки, которые вы можете нужно предоставить и рабочий каталог, если это актуально.

  4. сохранить проект.

  5. установить точки останова в коде, где вы хотите их.

  6. нажмите F5, чтобы начать отладку. (в этот момент ваши точки останова скажут, что они не будут поражены, потому что символы не загружены. Не беспокойся об этом сейчас.)

  7. сделайте все, что угодно, чтобы загрузить внешнее приложение ваша библиотека и запустите свой код.

Visual Studio обнаружит загрузку модуля, загрузит символы и остановится в точке останова.

присоединить к существующему процессу

Если вы не можете запустить процесс, но вместо этого должны присоединиться к процессу, который уже запущен, вы можете сделать это:

(Примечание: Если вы используете Экспресс-выпуск Visual Studio, то я не думаю он имеет эту функцию, но я не уверен в этом. Это достаточно легко сказать: у вас будет либо пункт меню, упомянутый на шаге 4 ниже, либо нет.)

  1. убедитесь, что процесс запущен.

  2. откройте проект DLL.

  3. установить точки останова и т. д.

  4. С Debug выберите присоединить к процессу...

  5. в появившемся диалоговом окне найдите процесс в списке, выделите его и нажмите кнопку прикрепить.

  6. Visual Studio перейдет в режим отладки. (в этот момент ваши точки останова скажут, что они не будут поражены, потому что символы не загружены. Не беспокойся об этом сейчас.)

  7. сделайте все возможное, чтобы загрузить внешний процесс и запустить код.

Visual Studio обнаружит загрузку модуля во внешнем процессе, загрузите символы и остановитесь на точке останова.


Б. Н. в обоих случаях, если внешний процесс загружает вашу DLL откуда-то, кроме bin/Debug папка вашего проекта, вы должны убедиться, что вы копируете DLL в это другое место каждый раз, когда вы строите его (вы можете настроить это автоматически в параметрах проекта). В противном случае Visual Studio не сможет обнаружить, что загружаемая DLL-это та, которую вы пытаетесь отлаживать.


можно использовать присоединить к процессу С Debug меню для отладки вашего проекта DLL. Может потребоваться использовать отладку в смешанном режиме, если отладка не выполняется с собственным кодом. Это можно сделать, выбрав управляемый и родной тип кода из окна, которое появляется при нажатии на выберите внутри присоединить к процессу


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


Если вы не хотите/не можете использовать внешнее приложение - вы можете вызвать библиотеку классов непосредственно из Visual Studio:Ctrl+Alt+I показать "Immediate" widow, тогда вы можете вызвать любой метод из своей библиотеки классов оттуда (используйте точки останова). Вам нужно будет ввести полные имена (т. е. пространства имен).