Программирование

Visual Studio: Загрузка символов отключена Include/Exclude

Почему Visual Studio показывает 'Загрузка символов отключена параметром включения/исключения' в отладке C++? Как включить автозагрузку символов, настроить политику Symbols, принудительно загрузить PDB. Пошаговое решение для окна Modules.

Почему Visual Studio отображает сообщение “Загрузка символов отключена параметром включения/исключения” в окне модулей во время отладки C++, несмотря на то, что в настройках не настроены никакие исключения символов?

Сообщение “Загрузка символов отключена параметром включения/исключения” появляется потому, что в политике загрузки символов (Symbols) Visual Studio есть список исключённых модулей — чаще всего это системные DLL — и по умолчанию для них загрузка PDB не производится. Даже если вы не добавляли собственных правил, Visual Studio может пометить модуль как “исключённый”; исправляют это переключением опции “Load all modules, unless excluded” (или «Search for all module symbols unless excluded») в Tools → Options → Debugging → Symbols или ручной загрузкой PDB через окно Modules. Для практических шагов и объяснений см. материалы по настройке Symbols и примеры на ITeCnote и StackOverflow.


Содержание


Почему Visual Studio показывает сообщение о загрузке символов

Когда вы открываете окно Modules во время отладки, Visual Studio показывает для каждого загруженного модуля статус загрузки символов. Статус “Symbol loading disabled by Include/Exclude setting” означает не сбой, а то, что текущая политика загрузки символов запретила попытку автоматически загрузить PDB для этого модуля. Такое поведение встречается часто — по умолчанию в списке исключений находятся системные DLL (kernel32.dll, user32.dll и т.п.), чтобы не тратить время на загрузку символов для компонентов ОС. Это объясняет, почему сообщение появляется даже если вы лично не добавляли исключений в своих настройках: Visual Studio использует предопределённую политику. Подробнее и коротко об этом описано на ITeCnote: https://itecnote.com/tecnote/visual-studio-symbol-loading-disabled-by-include-exclude-setting/.


Что означает Include/Exclude в настройках Symbols

Include/Exclude — это фильтр, который управляет тем, для каких модулей VS пытается найти и загрузить символы автоматически. В настройках (Tools → Options → Debugging → Symbols) есть глобальная политика, и есть списки конкретных исключений/включений. Несколько ключевых моментов:

  • По умолчанию некоторые модули исключены — это оптимизация производительности.
  • Политика может называться по-разному в разных версиях VS: “Load all modules, unless excluded” или “Search for all module symbols unless excluded”. На StackOverflow обсуждают именно переключение этой опции как решение: https://stackoverflow.com/questions/51020340/symbol-loading-disabled-by-include-exclude-setting.
  • Сообщение в Modules не говорит, что PDB невозможен — просто автоматическая попытка была запрещена. Вы всё ещё можете загрузить нужный PDB вручную или изменить политику.

Если коротко: Include/Exclude ограничивает автозагрузку символов; по умолчанию в Exclude попадают системные библиотеки.


Visual Studio загрузка символов: как включить и принудительно загрузить символы

Конкретные шаги, которые быстро решают проблему:

  1. Изменить глобальную политику загрузки символов
  • Откройте Tools → Options → Debugging → Symbols (в русской локали: Инструменты → Параметры → Отладка → Символы).
  • Найдите опцию, похожую на “Load all modules, unless excluded” / “Search for all module symbols unless excluded” и включите её. Это заставит VS пытаться загружать символы для всех модулей, кроме тех, что явно перечислены в Exclude. На практике это снимает сообщение для большинства модулей (см. обсуждение: https://stackoverflow.com/questions/51020340/symbol-loading-disabled-by-include-exclude-setting).
  • При необходимости очистите или отредактируйте список исключённых модулей.
  1. Добавить серверы символов и задать кэш
  • В том же окне добавьте Microsoft Symbol Servers или свой внутренний symbol server в список “Symbol file (.pdb) locations”.
  • Укажите местоположение кэша (symbol cache), чтобы скачанные PDB сохранялись локально.
  1. Принудительная загрузка для отдельного модуля
  • Во время отладки откройте Debug → Windows → Modules.
  • Найдите интересующий модуль, правой кнопкой мыши → Load Symbols → выбрать “Load Symbols From” и указать нужный путь или сервер. В блоге по отладке от Confiz подробно показаны ручные варианты и поведение окна Modules: https://www.confiz.com/blog/the-complete-guide-to-debugging-x-in-dynamics-365-finance-operations/.
  • Если PDB подходящей версии есть в указанном месте — символы загрузятся, и статус изменится.
  1. Что делать, если после включения опции символы всё ещё не загружаются?
  • Проверьте сообщения о загрузке символов в колонке “Symbol Load Information” в окне Modules — там будет причина отказа.
  • Убедитесь, что путь к PDB корректен и что GUID/timestamp PDB совпадает с модулем (см. следующую секцию).

Проверки PDB, сборка и соответствие версий

Частая причина, почему символы не грузятся даже при включённой политике — несоответствие или отсутствие PDB:

  • Генерация PDB в проекте. Убедитесь, что проект компилируется с генерацией отладочной информации (PDB). В свойствах проекта для C++ это варианты типа /Zi или “Program Database”. Инструкции по включению отладочных символов можно найти в руководствах по запуску отладки: https://mngb.ru/informatsiya/31/kak-zapustit-debag-v-visual-studio.
  • Совпадение версий. PDB содержит идентификатор (GUID/timestamp). Если бинарник загружен из места, где PDB другой сборки — загрузка не произойдёт. В “Symbol Load Information” Visual Studio покажет сообщение о несоответствии.
  • Release/оптимизации. В релизной сборке код может быть оптимизирован/стрипнут, тогда даже при наличии PDB отладка усложняется.
  • Модуль загружен из другой копии (например, из GAC, из папки System32 или из кэша) — проверьте путь модуля в окне Modules и удостоверитесь, что PDB для именно этой копии доступен.

Простой чек-лист:

  • Соберите проект с PDB (/Zi), затем Clean → Rebuild.
  • Откройте Modules → смотрите путь модуля и “Symbol Load Information”.
  • Если нужно — вручную укажите PDB через Load Symbols.

Дополнительные причины и быстрые советы (включая русские символы и выделение)

Быстрые причины и решения, которые иногда упускают из виду:

  • Сеть и доступ к symbol server: если вы используете внешний сервер символов, проверьте доступность и прокси.
  • Кэш символов повреждён: очистите symbol cache и повторите попытку.
  • Правила безопасности/антивирус могут блокировать скачивание PDB.
  • Различия в том, как отладчик работает с native vs managed кодом — иногда нужно включать соответствующий тип отладки.
  • Сообщение про Include/Exclude не связано с визуальными артефактами в редакторе — если вы искали в поиске “русские символы visual studio” или “как убрать выделение символа в visual studio”, это про отображение текста в редакторе, а не про загрузку PDB. Не путать две разные проблемы.

А если коротко — задайте себе три вопроса: где загружен модуль (путь), есть ли для него PDB, и разрешена ли глобальная политика автозагрузки? Ответы на них обычно приводят к решению.


Источники


Заключение

Коротко: сообщение “Загрузка символов отключена параметром включения/исключения” — обычно информативное и связано с политикой Symbols в Visual Studio (по умолчанию системные DLL исключены). Исправить можно двумя путями: изменить глобальную опцию (включить попытку загрузки для всех модулей, кроме явно исключённых) или вручную загрузить нужный PDB через окно Modules; параллельно проверьте, что PDB действительно сгенерирован и соответствует загруженному модулю. visual studio загрузка символов — решается обычно сочетанием смены политики и проверки PDB.

Авторы
Проверено модерацией
Модерация