21

Как устранить предупреждение "Точек останова не удастся достичь. Символы не были загружены для этого документа"?

18

Описание проблемы:

У меня есть приложение на C# для настольных ПК (используется версия Visual Studio Express), которое работало, но через 5 секунд перестало функционировать.

Я попробовал следующее:

  • Убедился, что конфигурация отладки, флаг отладки и полная информация для отладки установлены для всех сборок.
  • Удалил все папки bin и obj, а также все DLL-файлы, связанные с проектом, со всего моего компьютера.
  • Воссоздал проблемные проекты с нуля.
  • Перезагрузил компьютер.

В решении у меня есть два проекта Windows Forms. Один из них загружает информацию отладки, а другой - нет. Оба проекта ссылаются на сборку, по которой я пытаюсь получить информацию для отладки, точно так же в файле проекта. У кого-то есть идеи, что может быть не так?

Дополнительно: Хочу отметить для себя, когда вернусь к этому вопросу, что символы не загружаются до тех пор, пока сборка не будет загружена, а сама сборка загружается только по мере необходимости. Если точка останова находится в библиотеке, которая используется только в одной функции вашего основного сборника, символы не будут загружены (и точка останова будет показана как не установленная) до тех пор, пока эта функция не будет вызвана.

5 ответ(ов)

13

Чтобы начать отладку, как только вы достигли точки останова или использовали Debug > Break All, откройте Debug > Windows > Modules. Вы увидите список всех сборок, загруженных в процесс. Найдите нужную вам сборку, щелкните по ней правой кнопкой мыши и выберите "Symbol Load Information". Появится диалоговое окно, в котором будет перечислено все каталоги, в которых оно искало файл .pdb для данной сборки. Сравните этот список с фактическим местоположением .pdb. Убедитесь, что не обнаружен старый файл.

В обычных проектах сборка и ее файл .pdb должны всегда копироваться IDE в ту же папку, что и ваш .exe, то есть в папку bin\Debug вашего проекта. Если вы с этим работали, убедитесь, что вы удалили его из GAC.

7

Убедитесь, что вы находитесь в режиме Debug, а не в Release.

Если вы в режиме Debug:

  1. Сначала попробуйте пересобрать ваш проект, кликнув правой кнопкой мыши на проекте и выбрав Rebuild.
  2. Если это не помогло, попробуйте сделать очистку проекта, выбрав Clean (правый клик на проекте > Clean).

Если это тоже не сработало, проверьте следующее:

  1. Щелкните правой кнопкой мыши на вашем проекте.
  2. Выберите [Свойства] (горячая клавиша: Alt + Enter).
  3. Перейдите на вкладку [Сборка] (Build).
  4. Убедитесь, что установлены флажки [Define DEBUG constant] и [Define TRACE constant].
  5. Убедитесь, что флажок [Optimize Code] не установлен.
  6. Нажмите кнопку [Дополнительно] в нижней части вкладки Сборки.
  7. Проверьте, чтобы [Debug Info:] был установлен на [full].
  8. Нажмите [OK] и заново соберите проект 😉

(Шаг 7 генерирует файлы .pdb, которые являются отладочными символами)

3

Чтобы отключить опцию "Включить только мой код" (Enable Just My Code), перейдите в меню:

Инструменты (Tools) > Параметры (Options) > Отладка (Debugging) > Общие (General), и снимите галочку с соответствующей опции.

3

Попробуйте что-то простое — возможно, вы это уже пробовали. Щелкните правой кнопкой мыши по решению в обозревателе решений и выберите "Очистить решение". Это удалит все скомпилированные и временные файлы, связанные с решением.

После этого выполните сборку решения заново и попробуйте отладить его еще раз.

Также у меня были проблемы с точками останова в нескольких проектах решения — некоторые проектов компилируются в x86, а некоторые — в x64.

0

Иногда, даже если появляется эта ошибка, точка останова (Breakpoint) все равно срабатывает, так что можно просто игнорировать ошибку.

Это довольно часто происходит в представлениях (Views) веб-приложений MVC, то есть в файлах .cshtml.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь