Как отлаживать ссылку dll (имеющую pdb)

У меня есть два решения в моей рабочей области, скажем, A и B.

Решение A - более старый проект, который я закончил писать некоторое время назад. В решении B мне нужно использовать некоторые классы из решения A. Для этого я добавляю ссылку на dll одного из проектов в решении A.

Проблема в том, когда я пытаюсь отладить. Я хочу быть в состоянии войти в код, а также. Visual Studio не может загрузить код для этих классов ("Нет исходного кода, доступного для текущего местоположения."), И я могу только просматривать разборку, которая бесполезна.

Единственный известный мне способ отладки классов из решения A - это запустить решение B, отсоединить все процессы (в пункте меню "Отладка") и подключить процесс из решения A.

Тем не менее, это очень неудобно, и я могу только отладить A ИЛИ B сразу.

Есть ли способ разрешить входить в код ссылочных dll (для которых у меня есть исходный код)?


Решение: Моя ошибка заключалась в том, что я думал, что проект может быть только частью одного решения. Фактически, проект может быть частью любого количества решений.
Когда вам нужно сослаться на старый проект, вы должны просто добавить проект в решение. Это можно сделать, щелкнув правой кнопкой мыши новое решение в обозревателе решений> Добавить> Существующий проект.
Затем вы сможете добавить ссылку на проект. Как писали другие, вам, вероятно, следует полностью избегать использования dll-ссылок на ваш собственный код (или другой код, который вам может потребоваться изменить и отладить).

Очень хорошая ссылка на то, как должны быть разработаны решения, может быть найдена в MSDN.

Ответ 1

Если у вас есть ссылка проект, она должна работать немедленно.

Если это ссылка файл (dll), вам нужны отладочные символы (файл pdb), которые будут находиться в той же папке, что и dll. Убедитесь, что ваши проекты генерируют символы отладки (свойства проекта = > Build = > Advanced = > Output/Debug Info = full); и если вы скопировали dll, поместите pdb вместе с ним.

Вы также можете загружать символы непосредственно в IDE, если вы не хотите копировать какие-либо файлы, но это больше работает.

Самый простой вариант - использовать ссылки на проект!

Ответ 2

У меня была такая же проблема. Это то, что я нашел:

1) убедитесь, что все проекты используют одну и ту же платформу (это важно!)

2) в "Инструменты/Параметры" > "Отладка" > "Общие" убедитесь, что "Включить только мой код (только управляемый) НЕ отмечен

3) в Инструментах/Опции > Отладкa > Символы очищают все кешированные символы, отключают и удаляют все папки в списке "Символы файлов (.pdb)", кроме стандартных "Серверов Symbol Microsoft", но все равно не отключайте их. Также удалите все статические пути в текстовом поле "Кэш-символы в этом каталоге". Нажмите кнопку "Пустой символ". Наконец, убедитесь, что установлен переключатель "Только указанные модули".

4) в меню Build/Configuration Manager для всех проектов убедитесь, что конфигурация находится в режиме отладки.

Ответ 3

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

Ответ 4

Шаг 1: Перейдите в раздел Инструменты → Параметр → Отладка

Шаг 2: Снимите флажок Включить только мой код

Шаг 3: Снимите флажок Требовать, чтобы исходный файл соответствовал оригинальной версии

Шаг 4: Снимите флажок "Шаг над свойствами и операциями"

Ответ 5

Если вы хотите установить контрольную точку в исходном коде ссылочной DLL, сначала убедитесь, что у вас есть файл pdb, доступный для него. Затем вы можете просто открыть связанный файл исходного кода и установить там контрольную точку. Исходный файл не обязательно должен быть частью вашего решения. Как объяснено в Как установить контрольную точку в ссылочном коде в Visual Studio?

Вы можете просмотреть свои точки останова через окно точек останова, доступное через Debug → Windows → Breakpoints.

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

Ответ 6

У меня были файлы *.pdb в той же папке, и я использовал параметры от Arindam, но это все равно не работало. Оказывается, мне нужно было включить "Включить отладку собственного кода", которую можно найти в разделе "Свойства проекта"> "Отладка".

Ответ 7

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

В моих решениях есть каталог "Common Assemblies", который содержит мои собственные библиотеки DLL из других проектов. У библиотек DLL, на которые я ссылаюсь, также есть свои файлы PDB для отладки.

Чтобы отлаживать и устанавливать точки останова, я устанавливаю точку останова в источнике приложения-потребителя, где я вызываю метод или конструктор из сборки, а затем нажимаю INTO (F11) вызов метода/конструктора.

Отладчик загрузит исходный файл сборки в VS, и в этой точке могут быть установлены новые точки останова внутри сборки.

Это не прямо, а работает, если вы не хотите включать новую ссылку на проект и просто хотите ссылаться на общую сборку.

Ответ 8

Он должен работать. Я использовал для отладки файла .exe и DLL в одно и то же время! Я предлагаю 1) Включите путь dll в ваш проект B, 2) Затем выполните компиляцию в отладочном проекте A 3) Управляйте тем, что точки пути находятся в файле dll и файле pdb.... 4) После этого вы начинаете отлаживать проект B, и если все в порядке, вы сможете отлаживать оба проекта!

Ответ 9

Убедитесь, что ваша DLL не зарегистрирована в GAC. Visual Studio будет использовать версию в GAC и, вероятно, не будет иметь отладочной информации.