Как отлаживать проекты библиотеки внешних классов в visual studio?

137

У меня есть проект (A), который ссылается на сборку из библиотеки классов внешнего проекта (B), которая находится в другом против решения.

Мне еще предстоит понять, как я могу эффективно отлаживать библиотеку классов из B при запуске программы из проекта A. Есть ли что-то, что я должен включить в проекте B, например, отладочная информация и т. Д., Чтобы я мог войти во время отладки из A?

Заранее спасибо.

Константинос
источник

Ответы:

202

Попробуйте отключить Just My Code (JMC).

  • Сервис -> Параметры -> Отладчик
  • Снимите флажок «Включить только мой код»

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

РЕДАКТИРОВАТЬ

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

  • Отладка -> Windows -> Модули
  • Найдите DLL для интересующего вас проекта
  • Щелкните правой кнопкой мыши -> Загрузить символы -> Выберите путь к .PDB для вашего другого проекта.
JaredPar
источник
2
конкретный флажок уже снят. Однако я заметил, что он входит в метод внешней библиотеки, но переходит, когда я пытаюсь вызвать метод, являющийся частью интерфейса.
Константинос
Возможно, вам потребуется перейти к свойствам DLL и убедиться, что для параметра «Копировать локально» установлено значение «Истина». В противном случае, Модули не смогут найти .pdb для вашей справки.
Брайан Райнер
Просто мой код , кажется, не имеет никакого значения (я могу перейти к внешнему коду, даже если он включен), но поиск модуля в отладчике помогает.
TheOperator
3
Соответствующий файл символов не найден в этой папке.
Кристина
1
Если у вас нет файлов PDB для ссылочного модуля, ReSharper можно использовать для декомпиляции двоичных файлов с помощью параметра «Загрузить символы с помощью ReSharper Deecompiler» в меню правой кнопки мыши в меню «Отладка / Windows / Модули». очень могущественный.
Эмиласт
12

Это прослушивало меня в течение некоторого времени. Обычно я перестраиваю свою внешнюю библиотеку в режиме отладки, затем копирую файлы .dll и .pdb в корзину моего сайта. Это позволяет мне войти в библиотечный код.

TheGateKeeper
источник
10

Предположим путь

проект A

C:\Projects\ProjectA

проект B

C:\Projects\ProjectB

и dll ProjectB находится в

C:\Projects\ProjectB\bin\Debug\

Для отладки в ProjectBс ProjectA, выполните следующие действия

  1. Копирование B«s длл с DLL файлы .PDBв ProjectA» ы составителя каталога.
  2. Теперь отладка ProjectA. Когда код достигает той части, где вам нужно вызвать метод или события dll во время отладки, нажмите, F11чтобы перейти к коду dll.

ПРИМЕЧАНИЕ: НЕ ПРОПУСТИТЕ КОПИРОВАНИЕ ФАЙЛА .PDB

Сарат Аванаву
источник
5

Я запускаю два экземпляра Visual Studio - один для внешнего DLL и один для основного приложения.
В свойствах проекта внешней библиотеки установите следующее:

События сборки:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Отлаживать:

  • Запустите внешнюю программу: C:\<path-to-main>\bin\debug\<AppName>.exe

  • Рабочий каталог C:\<path-to-main>\bin\debug

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

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

MatrixManAtYrService
источник
1

[по словам Мартина Беккета, парня, который прислал мне этот ответ]

Вы можете отлаживать во внешней библиотеке.

На вкладке настроек проекта найдите «каталоги visual studio», в поле «исходный код» укажите путь к источникам openCV. Затем убедитесь, что файлы .pdb для каждой DLL-библиотеки отладки находятся в том же каталоге, что и DLL.

троек
источник
0

У меня была похожая проблема, так как мои контрольные точки в проекте (B) не были затронуты. Мое решение состояло в том, чтобы перестроить проект (B), а затем отладить проект (A), поскольку библиотеки должны были быть обновлены.

Visual Studio должна позволять вам отлаживать во внешней библиотеке.

Стефан Митич
источник
0

NuGet ссылки

Предположим, что -Project_A (создает project_a.dll) -Project_B (создает project_b.dll) и ссылки Project_B на Project_A с помощью пакетов NuGet, а затем просто скопируйте project_a.dll, project_a.pdb в папку Project_B / Packages. По сути, это должно быть скопировано в / bin.

Теперь отладка Project_A. Когда код достигает той части, где вам нужно вызвать метод или события dll во время отладки, нажмите F11, чтобы перейти к коду dll.

jasmintmp
источник