Как для отладки указанной библиотеке DLL (имея ПДБ)


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

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

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

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

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

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

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


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

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

8 100

8 ответов:

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

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

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

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

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

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

2) в Tools/Options>Debugging>General убедитесь, что "включить только мой код (только управляемый) не отмечен

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

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

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

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

вы можете просмотреть свои точки останова через окно точки останова, доступные через Debug - > Windows -> Точка прерывания.

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

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

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

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

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

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

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

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

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

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

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

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