Як налагодити посилання на dll (маючи pdb)


132

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

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

Проблема полягає в тому, коли я намагаюся налагоджувати. Я хочу мати змогу ввійти і в код А. Visual studio не в змозі завантажити код для цих класів ("Немає вихідного коду для поточного місця розташування."), І я можу переглянути лише розбирання, що не корисно.

Єдиний спосіб, за яким я знаю, налагоджувати класи від рішення A - це запустити рішення B, від'єднати всі процеси (в пункті меню Налагодження) та приєднати процес до рішення А.

Однак це дуже незручно, і я можу налагоджувати лише А АБО відразу.

Чи є спосіб дозволити вступити до коду посилаються на dlls (для яких у мене є вихідний код)?


Рішення: Моя помилка полягала в тому, що я вважав, що проект може бути частиною єдиного рішення. Насправді проект може бути частиною будь-якої кількості рішень.
Коли вам потрібно посилатися на старий проект, вам слід просто додати проект до рішення. Це робиться, клацнувши правою кнопкою миші нове рішення в Провіднику рішень> Додати> Існуючий проект.
Потім ви зможете додати посилання на проект. Як писали інші, вам, ймовірно, слід повністю уникати використання посилань на dll до власного коду (або іншого коду, який може знадобитися для зміни та налагодження).

Дуже гарне посилання на те, як слід розробити рішення, можна знайти в MSDN .


Це посилання MSDN є обов'язковим для читання .net devs (незалежно від керування джерелами, яке вони використовують). Я здивований, що раніше цього не бачив. Дякую!
Пат

Нові прибульцям, якщо ви вже знаєте про посилання проекту, і це не варіант (наприклад , вам потрібно налагодити пакет NuGet), то ігнорувати обслуговується відповідь і йти прямо до цього: stackoverflow.com/a/26029208/398630
BrainSlugs83

Відповіді:


113

Якщо у вас є посилання на проект , він повинен працювати негайно.

Якщо це посилання на файл (dll), вам потрібні символи налагодження (файл "pdb") у тій же папці, що і dll. Перевірте, чи ваші проекти генерують символи налагодження (властивості проекту => Збірка => Додатково => Інформація про вихід / відладку = повна); і якщо ви скопіювали dll, покладіть на нього pdb.

Ви також можете завантажувати символи безпосередньо в IDE, якщо ви не хочете копіювати жодні файли, але це більше роботи.

Найпростіший варіант - використовувати посилання на проекти!


3
На жаль, я думаю, що неможливо додати посилання на проект з іншого рішення (виправте мене, якщо я помиляюся!).
Elad

7
@Elad я щойно це зробив. Спочатку додайте до рішення «існуючий проект». Потім додайте посилання на проект, натиснувши Додати посилання на проект. Ви можете встановити точки перерви в існуючих файлах проекту. Це добре, оскільки файли не копіюються.
user420667

3
У мене DLL-проект є орієнтиром на проект, але точка перелому всередині ігнорується.
Слав

1
Мені фактично вдалося налагодити збірку (реліз) сьогодні, яка була додана як посилання на файл. Добре для мене, але як це сталося? MSVC2010, C #, (ASP) .NET 4.0, посилальна збірка існує як налагодження + випуск (але до проекту доданий лише файл випуску). Дуже хотілося б це уточнити.
Tobias81

1
Для мене він працював один день, але потім наступного дня не працював (маючи DLL-файли та файли PDB). Натискаючи кнопку "Порожній кеш-символ" на Інструменти> Опції> Налагодження> Символи виправлено це.
Павло

45

У мене було те саме питання. Він - це те, що я знайшов:

1) переконайтесь, що всі проекти використовують однакові рамки (це важливо!)

2) у меню Інструменти / Параметри> Налагодження> Загальне переконайтесь, що "Увімкнути лише мій код (лише керований) НЕ галочкою

3) в меню Інструменти / Параметри> Налагодження> Символи очистити всі кешовані символи, зніміть і видаліть усі місця папок у списку списку "Файл символів (.pdb)", за винятком типових "Серверів символів Microsoft", але все одно зніміть його. Також видаліть будь-які статичні шляхи в текстовому полі "Кеш-символи в цьому каталозі". Натисніть кнопку "Порожній кеш символів". Нарешті переконайтесь, що відмічено перемикач "Тільки вказані модулі".

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


3
Моя проблема полягала в тому, що два мої проекти використовували різні .Net Frameworks: 4.0 та 4.5. Тх!
користувач627283

1) і 4) мають вирішальне значення. Не забудьте побудувати в режимі налагодження і використовувати той самий фреймворк.
scott_f

12

Ще один момент, про який слід пам’ятати, переконайтеся, що посилання, що посилаються, не встановлені в GAC. Після тестування я встановив свої dlls в GAC, щоб зробити тестування на системному рівні. Пізніше, коли мені довелося знову налагоджувати код, я не міг вступати у посилання, що зсилаються, доки не видалив їх з GAC.


2
СПАСИБІ! Це було моє питання. Не можу повірити, що я цього не зрозумів: - / я думав, що встановлення посилання на проект якось перекриє те, що встановлено в GAC.
SnookerC

Абсолютно! Це ДУЖЕ хороший момент. Навіть якщо у вас однакова версія .NET Framework, якщо у вас є код у GAC при спробі налагодження, він не потрапить до точки перелому, якщо .PDB файл у GAC відрізняється від файлу у вашій папці проекту. Рішення для цього полягає в тому, щоб Un-GAC DLL, скласти, а потім повторно GAC скласти.
DigiOz Multimedia

7

Крок 1: Перейдіть до Інструменти -> Опція -> Налагодження

Крок 2: Зніміть прапорець Увімкнути лише мій код

Крок 3: Зніміть прапорці Потрібно, щоб вихідний файл точно відповідав оригінальній версії

Крок 4: Зніміть прапорець Крок над властивостями та операторами


3

У мене були *.pdbфайли в тій самій папці і я використовував параметри Arindam , але він все ще не працював. Виявляється, мені потрібно було ввімкнути Увімкнення налагодження нативного коду, який можна знайти у розділі Властивості проекту> Налагодження .


1
ця інформація повинна бути включена до прийнятої відповіді. його те, що я спеціально шукав. Дякую, що поділились! +1
Херіберто Луго

2

Коли ви хочете встановити точку перерви у вихідному коді згаданого DLL, спочатку переконайтеся, що у вас є доступний файл pdb. Тоді ви можете просто відкрити відповідний файл вихідного коду і встановити там точку перерви. Вихідний файл не повинен бути частиною вашого рішення. Як пояснено у розділі Як я можу встановити точку розриву у згаданому коді у Visual Studio?

Ви можете переглянути свої точки перерви через вікно проривів, доступне через Налагодження -> Windows -> Точки прориву.

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


1
Це працює лише в тому випадку, якщо зовнішній файл, де ви розмістили точку перелому, відповідає точному шляху в PDB. (Наприклад, працює лише в тому випадку, якщо ви створили DLL на своїй машині.)
Josh M.

2

Переконайтесь, що ваша DLL не зареєстрована в GAC. Visual Studio буде використовувати версію в GAC, і, ймовірно, не буде інформації про налагодження.


1

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

У моїх рішеннях є каталог "Загальні збори", який містить власні DLL-файли інших проектів. DLL, на які я посилаюсь, також мають свої супровідні файли PDB для налагодження.

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

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

Це не прямо, але працює, якщо ви не хочете включати нову посилання на проект і просто хочете замість цього посилатися на спільну збірку.


0

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


0

Найбільш випрямлений спосіб, який я знайшов, використовуючи VisualStudio 2019 для налагодження зовнішньої бібліотеки, на яку ви посилаєтесь в NuGet, це зробити наступні кроки:

  1. Інструменти> Опції> Налагодження> Загальне> Скасувати "Увімкнути лише мій код"

  2. Перейдіть до Explorer Explorer> Відкрити з кешу NuGet Packages Елемент списку

  3. Введіть назву пакета NuGet, яку ви хочете налагодити, у полі пошуку та натисніть «ОК» введіть тут опис зображення

  4. У Провіднику асемблерії клацніть правою кнопкою миші імпортну збірку та виберіть "Генерувати Pdb" введіть тут опис зображення

  5. Виберіть спеціальний шлях, куди потрібно зберегти .PDB-файл, і рамку, для якої це потрібно генерувати

    введіть тут опис зображення

  6. Скопіюйте файл .PDB з папки, згенерованої у папку Налагодження, і тепер ви можете встановити точки перерви в коді бібліотеки цієї збірки


Звучить добре, за винятком того, що я не можу знайти жодного провідника асамблеї; це не частина Решарпера?
Роберт Масса
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.