Файл с символом не загружается для отладки пользовательского проекта в Visual Studio 2012
У меня есть большое решение в Visual Studio 2012, которое состоит из исполняемых файлов и проектов библиотеки классов.
При отладке приложения точки останова в одном конкретном проекте библиотеки классов не попадают.
Я просмотрел окно Debug > Windows > Modules, чтобы проверить статус символов для этого проекта, и он говорит "Не удается найти или открыть файл PDB" .
Он также говорит "Нет" в столбце "Код пользователя" .
Я замечаю, что в решении есть несколько других пользовательских проектов, которые показывают "Нет" в этом столбце, и их символы также не загружаются. Все, что имеет "Да" в разделе "Код пользователя", похоже, не загрузило pdb. Но я не уверен, что это актуально.
Я использовал dumpbin/headers в dll, и путь к файлу pdb присутствует и исправлен.
Модуль, безусловно, не входит в список исключений для загрузки символа.
Я также попытался щелкнуть правой кнопкой мыши по записи в окне модулей, выбрав "Загрузить символы" и перейти к пути, указанному в заголовке dll. Когда я выбираю pdb, он говорит "Соответствующий файл символов не найден в этой папке.
Я получаю это после того, как я удалил эти папки и файлы, очистил решение, закрыл его и перестроил все это.
Pdb определенно был построен в то же время, что и DLL.
Таким образом, проблема заключается в том, что часть сообщения "не может открыть pdb" сообщения об ошибке.
Я пробовал это на двух компьютерах, и оба они проявляют одинаковое поведение.
Может кто-нибудь предложить какие-либо предложения о том, куда идти отсюда, и, возможно, почему на земле не будет загружен встроенный pdb, соответствующий dll?
Ответы
Ответ 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
У меня была эта проблема, и я подумал, что могу исправить это, так как это поможет другим (возможно, даже мне снова?!) в будущем...
Убедитесь, что когда вы подключаетесь к процессу на удаленном сервере, для параметра "Прикрепить к" установлено значение
Автоматически определять тип кода для отладки
Для этого, когда предоставлен определитель сервера и отображается список процессов, нажмите кнопку "Выбрать" рядом с входом "Прикрепить к".
Затем выберите "Автоматически определять тип кода для отладки" и ОК вне экрана, затем присоедините.
Это, по крайней мере, решило проблему для меня.
Ответ 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
- Проверьте параметры из этого ответа: fooobar.com/questions/122103/...
- Нажмите " Дополнительно" и убедитесь, что для " Отладочная информация" установлено значение "ПОЛНЫЙ".
![Advanced tab screenshot]()
- Проверьте Run Configuration во всех проектах в решении
Ответ 17
У меня была эта проблема, пробовал все другие решения (это заняло 2 дня! Я плачу...! ДВА ДНЯ!) Но, наконец, я понял, что мой файл был зарегистрирован в GAC, я удалил его, и проблема была решена.
В командной строке введите следующую команду:
gacutil –u <assembly name>
Как удалить сборку из глобального кэша сборок