Как отлаживать ссылочную dll (имея pdb) - PullRequest
116 голосов
/ 15 июля 2009

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

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

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

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

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

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


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

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

Ответы [ 8 ]

97 голосов
/ 15 июля 2009

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

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

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

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

40 голосов
/ 25 сентября 2014

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

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

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

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

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

9 голосов
/ 03 января 2013

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

3 голосов
/ 19 июля 2017

Шаг 1: Перейти к Инструменты -> Опция -> Отладка

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

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

Шаг 4: Снимите флажок «Перешагнуть через свойства и операторы»

2 голосов
/ 02 августа 2018

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

2 голосов
/ 06 ноября 2015

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

Вы можете просмотреть свои точки останова через окно точек останова, доступное через «Отладка» -> Windows -> «Точки останова».

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

1 голос
/ 12 июля 2013

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

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

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

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

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

0 голосов
/ 15 июля 2009

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

...