Поделиться через


Устранение неполадок с точками останова в отладчике Visual Studio

Область применения: Visual Studio

Предупреждения точки останова

При отладке точка останова имеет два возможных визуальных состояния:

  • Если отладчик может успешно установить точку останова в целевом процессе, она будет отображаться как закрашенный красный кружок.
  • Полый круг (темно-серый или белый заполненный в зависимости от темы), если точка останова отключена или возникает предупреждение при попытке задать точку останова.

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

"Нет загруженных символов для этого документа"

Перейдите к отладке модулей Windows>при отладке>и проверьте, загружен ли модуль.

  • Если модуль загружен, проверьте, загружены ли символы, в столбце Состояние символов.
    • Если символы не загружены, проверьте состояние символа, чтобы диагностировать проблему:

      В окне "Модули" щелкните правой кнопкой мыши модуль, для которого символы не загружены и выберите сведения о загрузке символов....

      Снимок экрана: сведения о загрузке символов в окне модулей.

      Дополнительные сведения о загрузке символов см. в статье Указание файлов символов (.pdb) и исходных файлов.

    • Если символы загружены, PDB-файл не содержит сведений об исходных файлах. Некоторые возможные причины:

      • Если исходные файлы были добавлены недавно, убедитесь в том, что загружается последняя версия модуля.
      • Можно создать очищенные PDB-файлы с помощью параметра компоновщика /PDBSTRIPPED. Очищенные PDB-файлы не содержат сведений об исходных файлах. Убедитесь в том, что вы работаете с полным, а не очищенным PDB-файлом.
      • PDB-файл частично поврежден. Удалите файл и выполните чистую сборку модуля, чтобы попытаться устранить проблему.
  • Если модуль не загружен, проверьте следующее, чтобы найти причину:
    • Убедитесь в том, что выполняется отладка правильного процесса.
    • Проверьте, выполняется ли отладка соответствующего кода. Узнать, для отладки какого типа кода настроен отладчик, можно в окне Процессы (Отладка>Окна>Процессы). Например, если вы пытаетесь выполнить отладку кода C#, убедитесь, что ваш отладчик настроен для соответствующего типа и версии .NET (например, "Управляемый код (v4*)", "Управляемый код (v2*/v3*) или "Управляемый код (CoreCLR)).

"… текущий исходный код отличается от версии, построенной в..."

Если исходный файл изменился и исходный код больше не соответствует отлаживаемому коду, отладчик по умолчанию не будет устанавливать точки останова в коде. Как правило, эта проблема возникает, если исходный файл изменился, но исходный код не был перестроен. Чтобы устранить эту проблему, перестройте проект. Если система сборки считает, что проект уже обновлен, даже если это не так, можно принудительно перестроить систему проектов. Перестройте проект, сохранив исходный файл повторно или выполнив очистку выходных данных сборки перед сборкой.

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

Чтобы отключить проверки безопасности, выполните одно из указанных ниже действий.

  • Чтобы изменить отдельную точку останова, наведите указатель мыши на значок точки останова в редакторе и щелкните значок параметров (в виде шестеренки). В редактор добавится окно просмотра. В верхней части окна просмотра есть гиперссылка, указывающая на расположение точки останова. Щелкните гиперссылку, чтобы разрешить изменение расположения точки останова, и установите флажок Разрешить наличие отличий в исходном коде от первоначальной версии.
  • Чтобы изменить этот параметр для всех точек останова, выберите Отладка>Параметры и настройки. На странице Отладка / Общие снимите флажок Требовать точного соответствия исходной версии файлов . Не забудьте снова включить этот параметр после завершения отладки.

Точка останова была установлена успешно (без предупреждения), но не сработала

В этом разделе содержатся сведения об устранении неполадок в ситуации, когда отладчик не выводит предупреждений — точка останова представлена закрашенным красным кружком во время отладки, но не срабатывает.

Вот несколько моментов, которые следует проверить.

  1. Если код выполняется в нескольких процессах или на нескольких компьютерах, убедитесь в том, что отлаживается нужный процесс на нужном компьютере.
  2. Убедитесь в том, что код выполняется. Чтобы проверить, выполняется ли код, добавьте вызов System.Diagnostics.Debugger.Break (C# или VB) либо __debugbreak (C++) в строку кода, в которой вы пытаетесь установить точку останова, а затем перестройте проект.
  3. При отладке оптимизированного кода убедитесь в том, что функция, в которой установлена точка останова, не встраивается в другую функцию. Описанный ранее тест Debugger.Break можно использовать для проверки и этой проблемы.
  4. Чтобы подключиться к сценариям обработки, убедитесь, что вы отладите правильный тип кода (например, код скрипта и платформа .NET Framework и .NET 5+). Чтобы изучить, установите флажок "Присоединить к процессу" в диалоговом окне "Подключение к процессу" и выберите "Выбрать", если это необходимо, чтобы изменить тип кода.

После удаления точки останова она по-прежнему применяется при запуске отладки

Если удалить точку останова во время отладки, она может снова сработать при очередном запуске отладки. Чтобы прекратить применение этой точки останова, убедитесь, что все ее экземпляры удалены из окна Точки останова .