Вопрос по c#, visual-studio-2008, visual-studio-2005, visual-studio – Как отлаживать ссылочную dll (имея pdb)
Мой вопрос касается 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.
Это должно работать. Я использовал для отладки EXE-файла и DLL в то же время! Я предлагаю 1) Включите путь DLL в ваш проект B, 2) Затем скомпилируйте в отладочный проект. 3) Проверьте, что путь указывает на файл A dll и de pdb .... 4) После этого вы начинаете отладку проекта B и, если все в порядке, вы сможете отлаживать оба проекта!
Если у тебя естьproject ссылка, это должно сработать сразу.
Если этоfile Для ссылки (dll) необходимо, чтобы символы отладки (файл "pdb") находились в той же папке, что и dll. Убедитесь, что ваши проекты генерируют символы отладки (свойства проекта = & gt; Build = & gt; Advanced = & gt; Output / Debug Info = full); и если у вас естьcopied dll, поставь с ним pdb.
Вы также можете загружать символы непосредственно в IDE, если вы не хотите копировать какие-либо файлы, но это больше работы.
Самый простой вариант - использовать ссылки на проекты!
Я не хочу включать проект внешней библиотеки классов в некоторые из моих решений, поэтому я перехожу к сборкам, которые я использую по-другому.
Мои решения имеют "Общие сборки" каталог, который содержит мои собственные библиотеки DLL из других проектов. Библиотеки DLL, на которые я ссылаюсь, также имеют свои файлы PDB для отладки.
Для отладки и установки точек останова я устанавливаю точку останова в источнике потребляющего приложения, где я вызываю метод или конструктор из сборки, и затем выполняю INTO (F11) вызов метода / конструктора.
Отладчик будет загружать исходный файл сборки в VS, и в этой точке могут быть установлены новые точки останова внутри сборки.
Это не просто, но работает, если вы не хотите включать новую ссылку на проект и просто хотите вместо нее ссылаться на общую сборку.
Когда вы хотите установить точку останова, в исходном коде dll, на который ссылаются, сначала убедитесь, что у вас есть файл pdb для него. Затем вы можете просто открыть соответствующий файл исходного кода и установить точку останова там. Исходный файл не обязательно должен быть частью вашего решения. Как объяснено вКак установить точку останова в ссылочном коде в Visual Studio?
Вы можете просмотреть свои контрольные точки через окно контрольных точек, доступное через Debug - & gt; Windows - & gt; Контрольные точки.
Преимущество этого подхода состоит в том, что вам не нужно добавлять существующий проект в ваше решение только для целей отладки, так как отказ от него сэкономил мне много времени на сборку. Очевидно, что создание решения с одним проектом намного быстрее, чем создание решения с большим их количеством.
Я была такая же проблема. Он то, что я нашел:
1) убедитесь, что все проекты используют одну и ту же платформу (это очень важно!)
2) в разделе «Инструменты / Параметры»> «Отладка»> «Обязательно» установите флажок «Включить только мой код (только управляемый)».
3) в Инструменты / Параметры & gt; Отладка & gt; Символы удалите все кэшированные символы, снимите отметку и удалите все расположения папок в расположениях & quot; Файл символов (.pdb) & quot; список, за исключением по умолчанию «Серверы Microsoft Symbol» но все еще снимите галочку тоже. Также удалите все статические пути в символах «Кэш в этом каталоге». текстовое окно. Нажмите «Очистить кэш символов». кнопка. Наконец, убедитесь, что & quot; Только указанные модули & quot; радио-кнопка отмечена.
4) в меню Build / Configuration Manager для всех проектов убедитесь, что конфигурация находится в режиме отладки.
Еще один момент, который нужно иметь в виду, убедитесь, что указанные библиотеки не установлены в GAC. После тестирования я установил свои библиотеки в GAC для тестирования на уровне системы. Позже, когда мне снова пришлось отлаживать свой код, я не мог войти в указанные сборки, пока не удалил их из GAC.
У меня был*.pdb
файлы в той же папке и использовали параметры изArindam, но это все равно не сработало. Оказывается, мне нужно было включитьEnable native code debugging который можно найти подProject properties > Debug.