Как устранить предупреждение "Точек останова не удастся достичь. Символы не были загружены для этого документа"?
Описание проблемы:
У меня есть приложение на C# для настольных ПК (используется версия Visual Studio Express), которое работало, но через 5 секунд перестало функционировать.
Я попробовал следующее:
- Убедился, что конфигурация отладки, флаг отладки и полная информация для отладки установлены для всех сборок.
- Удалил все папки bin и obj, а также все DLL-файлы, связанные с проектом, со всего моего компьютера.
- Воссоздал проблемные проекты с нуля.
- Перезагрузил компьютер.
В решении у меня есть два проекта Windows Forms. Один из них загружает информацию отладки, а другой - нет. Оба проекта ссылаются на сборку, по которой я пытаюсь получить информацию для отладки, точно так же в файле проекта. У кого-то есть идеи, что может быть не так?
Дополнительно: Хочу отметить для себя, когда вернусь к этому вопросу, что символы не загружаются до тех пор, пока сборка не будет загружена, а сама сборка загружается только по мере необходимости. Если точка останова находится в библиотеке, которая используется только в одной функции вашего основного сборника, символы не будут загружены (и точка останова будет показана как не установленная) до тех пор, пока эта функция не будет вызвана.
5 ответ(ов)
Чтобы начать отладку, как только вы достигли точки останова или использовали Debug > Break All
, откройте Debug > Windows > Modules
. Вы увидите список всех сборок, загруженных в процесс. Найдите нужную вам сборку, щелкните по ней правой кнопкой мыши и выберите "Symbol Load Information". Появится диалоговое окно, в котором будет перечислено все каталоги, в которых оно искало файл .pdb
для данной сборки. Сравните этот список с фактическим местоположением .pdb
. Убедитесь, что не обнаружен старый файл.
В обычных проектах сборка и ее файл .pdb
должны всегда копироваться IDE в ту же папку, что и ваш .exe
, то есть в папку bin\Debug
вашего проекта. Если вы с этим работали, убедитесь, что вы удалили его из GAC.
Убедитесь, что вы находитесь в режиме Debug, а не в Release.
Если вы в режиме Debug:
- Сначала попробуйте пересобрать ваш проект, кликнув правой кнопкой мыши на проекте и выбрав Rebuild.
- Если это не помогло, попробуйте сделать очистку проекта, выбрав Clean (правый клик на проекте > Clean).
Если это тоже не сработало, проверьте следующее:
- Щелкните правой кнопкой мыши на вашем проекте.
- Выберите [Свойства] (горячая клавиша: Alt + Enter).
- Перейдите на вкладку [Сборка] (Build).
- Убедитесь, что установлены флажки [Define DEBUG constant] и [Define TRACE constant].
- Убедитесь, что флажок [Optimize Code] не установлен.
- Нажмите кнопку [Дополнительно] в нижней части вкладки Сборки.
- Проверьте, чтобы [Debug Info:] был установлен на [full].
- Нажмите [OK] и заново соберите проект 😉
(Шаг 7 генерирует файлы .pdb
, которые являются отладочными символами)
Чтобы отключить опцию "Включить только мой код" (Enable Just My Code), перейдите в меню:
Инструменты (Tools) > Параметры (Options) > Отладка (Debugging) > Общие (General), и снимите галочку с соответствующей опции.
Попробуйте что-то простое — возможно, вы это уже пробовали. Щелкните правой кнопкой мыши по решению в обозревателе решений и выберите "Очистить решение". Это удалит все скомпилированные и временные файлы, связанные с решением.
После этого выполните сборку решения заново и попробуйте отладить его еще раз.
Также у меня были проблемы с точками останова в нескольких проектах решения — некоторые проектов компилируются в x86, а некоторые — в x64.
Иногда, даже если появляется эта ошибка, точка останова (Breakpoint
) все равно срабатывает, так что можно просто игнорировать ошибку.
Это довольно часто происходит в представлениях (Views
) веб-приложений MVC, то есть в файлах .cshtml
.
Как получить согласованное побайтовое представление строк в C# без ручного задания кодировки?
JavaScriptSerializer - Сериализация JSON перечислений в виде строк
Если папка не существует, создайте её
Как установить заголовок Content-Type для запроса HttpClient?
Как получить полный объект в console.log() Node.js, а не '[Object]'?