Подтвердить что ты не робот

Файл с символом не загружается для отладки пользовательского проекта в Visual Studio 2012

У меня есть большое решение в Visual Studio 2012, которое состоит из исполняемых файлов и проектов библиотеки классов. При отладке приложения точки останова в одном конкретном проекте библиотеки классов не попадают.

Я просмотрел окно Debug > Windows > Modules, чтобы проверить статус символов для этого проекта, и он говорит "Не удается найти или открыть файл PDB" .
Он также говорит "Нет" в столбце "Код пользователя" .
Я замечаю, что в решении есть несколько других пользовательских проектов, которые показывают "Нет" в этом столбце, и их символы также не загружаются. Все, что имеет "Да" в разделе "Код пользователя", похоже, не загрузило pdb. Но я не уверен, что это актуально.

Я использовал dumpbin/headers в dll, и путь к файлу pdb присутствует и исправлен.

Модуль, безусловно, не входит в список исключений для загрузки символа.

Я также попытался щелкнуть правой кнопкой мыши по записи в окне модулей, выбрав "Загрузить символы" и перейти к пути, указанному в заголовке dll. Когда я выбираю pdb, он говорит "Соответствующий файл символов не найден в этой папке.

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

Таким образом, проблема заключается в том, что часть сообщения "не может открыть pdb" сообщения об ошибке.

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

Может кто-нибудь предложить какие-либо предложения о том, куда идти отсюда, и, возможно, почему на земле не будет загружен встроенный pdb, соответствующий dll?

4b9b3361

Ответ 1

Я попробовал несколько инструментов, чтобы проверить, действительно ли сопоставлены pdb и dll, и используя chkmatch, я мог видеть, что GUID в DLL запускаются и pdb в папке obj не совпал.

Итак, получается, что хотя dll и pdb в папке obj проекта являются совпадением, DLL, которая фактически копировалась в целевую папку приложения событием post-build, была старой dll из предыдущей сборки.

Событие post-build выполнялось до того, как этот конкретный проект построил или, по крайней мере, закончил строительство, и копировал в существующую dll из бункера, который впоследствии был перезаписан продолжающейся сборкой.

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

Ответ 2

Я просто удалил папку bin и obj из папки проекта запуска и восстановил решение.

Ответ 3

Для меня я просто удалил проект из IIS и снова создал его, и он отлично работает

Ответ 4

Для меня это помогло использовать инструмент chkmatch, а затем просто закрыть и открыть визуальную студию, сделать чистую и перестроить. Теперь мой pdb также загружается. Вы можете убедиться, что это так, как указал Нангидрин, из Debug → Windows → Modules - это представление доступно только во время отладки.

Ответ 5

В моем случае более старая версия ссылочной dll была в моем GAC. Сбросил его, и он сработал.

Ответ 6

Я обнаружил, что проект, о котором я получал сообщение, оптимизировался при построении.

Я включил свойства проектов, вкладку "Компиляция", "Параметры расширенной компиляции"... и снял флажок Enable Optimizations

Снимите флажок Включить оптимизацию

Ответ 7

Напоминание: добавьте проект в конфигурацию "Debug"... для тех, кто любит меня и забывает и глупо.

Ответ 8

Удалил проект из решения и снова добавил его к решению, которое работало для меня.:)

Ответ 9

Бит поздно на вечеринку здесь - на всякий случай это полезно.

У нас есть несколько отдельных сайтов (в разных решениях в Visual Studio). При начальной загрузке одного из сайтов мы обращались к другому сайту, который возвращал бы изображение.

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

Престижность Нангидрина за то, что он упоминает окно отладки модулей (очень полезно) и для того, чтобы поставить меня на правильный путь с событием post build.

Ответ 10

Ответ от другого потока, который работал у меня: fooobar.com/questions/122110/...
- В Visual Studio: Свойства проекта → Сборка → Кнопка "Дополнительно" → "Отладка информации" и убедитесь, что значение не "none".

Ответ 11

У меня была эта проблема, и я подумал, что могу исправить это, так как это поможет другим (возможно, даже мне снова?!) в будущем...

Убедитесь, что когда вы подключаетесь к процессу на удаленном сервере, для параметра "Прикрепить к" установлено значение

Автоматически определять тип кода для отладки

Для этого, когда предоставлен определитель сервера и отображается список процессов, нажмите кнопку "Выбрать" рядом с входом "Прикрепить к".

Изображение 1 Затем выберите "Автоматически определять тип кода для отладки" и ОК вне экрана, затем присоедините.

Изображение 2
Это, по крайней мере, решило проблему для меня.

Ответ 12

В моем случае был установлен флажок Enable Just My Code в Tools>>Options>>Debugging>>General.

Я снял флажок, и это сработало.

Пример изображения

Ответ 13

В моем окне отладки у меня была строка вроде этого:

Символы для модуля "MyModule.dll" не были загружены.

Я удалил параметр "Оптимизировать код" в свойствах проекта → Сборка. И ошибка исчезла.

Ответ 14

Эта проблема может быть вызвана неправильной ссылкой dlls, используемой в проекте.

Удалите obj и bin папки в текущем проекте и build.

Ответ 15

Проверьте разрешение для временной папки ASP.NET:

"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files"

Пользователь пула приложений должен иметь права на вложенную папку с файлами ASP.NET, например:

root\60039743\c28e12ee

Ответ 16

  1. Проверьте параметры из этого ответа: fooobar.com/questions/122103/...
  2. Нажмите " Дополнительно" и убедитесь, что для " Отладочная информация" установлено значение "ПОЛНЫЙ".
    Advanced tab screenshot
  3. Проверьте Run Configuration во всех проектах в решении

Ответ 17

У меня была эта проблема, пробовал все другие решения (это заняло 2 дня! Я плачу...! ДВА ДНЯ!) Но, наконец, я понял, что мой файл был зарегистрирован в GAC, я удалил его, и проблема была решена.

В командной строке введите следующую команду:

gacutil –u <assembly name>

Как удалить сборку из глобального кэша сборок