Вопрос по c#, visual-studio-2008, visual-studio-2005, visual-studio – Как отлаживать ссылочную dll (имея pdb)

110

Мой вопрос касается Visual Studio 2008, хотя я полагаю, что это должно быть то же самое в VS2005

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

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

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

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

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

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

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

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

Новички, если вы уже знаете о ссылках на проект и это не вариант (например, вам нужно отладить пакет NuGet), тогда проигнорируйте принятый ответ и перейдите прямо к этому:stackoverflow.com/a/26029208/398630 BrainSlugs83
Эта ссылка MSDN является обязательной для чтения для разработчиков .net (независимо от того, какой элемент управления они используют). Я удивлен, что раньше этого не видел. Спасибо! Pat

Ваш Ответ

8   ответов
0

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

92

Если у тебя естьproject ссылка, это должно сработать сразу.

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

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

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

У меня есть проект DLL в качестве ссылки на проект, но точки останова внутри игнорируются.
Да, ты можешь. Я использую все время, когда в новом решении используется только одна часть библиотеки.
К сожалению, я думаю, что невозможно добавить ссылку на проект в проект из другого решения (поправьте меня, если я ошибаюсь!). Elad
@ Рад, что я только что сделал это. Сначала добавьте «существующий проект» к решению. Затем добавьте ссылку на проект, нажав «Добавить ссылку на проект». Вы можете установить точки останова в существующих файлах проекта. Это хорошо, потому что файлы не копируются.
Сегодня я действительно смог отладить сборку (release-), которая была добавлена как ссылка на файл. Хорошо для меня, но как это случилось? MSVC2010, C #, (ASP) .NET 4.0, ссылочная сборка существует как debug + release (но только файл релиза добавлен в проект). Очень хотел бы уточнить это.
1

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

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

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

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

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

2

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

Вы можете просмотреть свои контрольные точки через окно контрольных точек, доступное через Debug - & gt; Windows - & gt; Контрольные точки.

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

Это работает, только если внешний файл, в который вы поместили точку останова, соответствует точному пути в PDB. (Например, работает, только если вы создали DLL на своем компьютере.)
38

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

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

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

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

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

Не работал для меня ...
1) и 4) имеют решающее значение. Не забудьте собрать в режиме отладки и использовать ту же платформу.
Моя проблема заключалась в том, что в двух моих проектах использовались разные .Net Framework: 4.0 и 4.5. Tx!
это должно явно получить больше голосов
Это сработало для меня.
9

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

Абсолютно! Это очень хороший момент. Даже если у вас та же версия .NET Framework, если у вас есть код в GAC при попытке отладки, он не достигнет точки останова, если файл .PDB в GAC отличается от файла в папке вашего проекта. Решением для этого является Un-GAC DLL, сборка, а затем повторная сборка GAC.
БЛАГОДАРЮ ВАС! Это была моя проблема. Я не могу поверить, что я не понял этого: - / Я думал, что установка ссылки на проект каким-то образом переопределит то, что было установлено в GAC.
1

У меня был*.pdb файлы в той же папке и использовали параметры изArindam, но это все равно не сработало. Оказывается, мне нужно было включитьEnable native code debugging который можно найти подProject properties > Debug.

эта информация должна быть включена в принятый ответ. это то, что я специально искал. Спасибо, что поделился! +1
2

Step 1: Идти кTools-->Option-->Debugging

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

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

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

Похожие вопросы