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 показывает сообщение о загрузке символов
- Что означает Include/Exclude в настройках Symbols
- Visual Studio загрузка символов: как включить и принудительно загрузить символы
- Проверки PDB, сборка и соответствие версий
- Дополнительные причины и быстрые советы (включая русские символы и выделение)
- Источники
- Заключение
Почему 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 загрузка символов: как включить и принудительно загрузить символы
Конкретные шаги, которые быстро решают проблему:
- Изменить глобальную политику загрузки символов
- Откройте 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).
- При необходимости очистите или отредактируйте список исключённых модулей.
- Добавить серверы символов и задать кэш
- В том же окне добавьте Microsoft Symbol Servers или свой внутренний symbol server в список “Symbol file (.pdb) locations”.
- Укажите местоположение кэша (symbol cache), чтобы скачанные PDB сохранялись локально.
- Принудительная загрузка для отдельного модуля
- Во время отладки откройте 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 подходящей версии есть в указанном месте — символы загрузятся, и статус изменится.
- Что делать, если после включения опции символы всё ещё не загружаются?
- Проверьте сообщения о загрузке символов в колонке “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, и разрешена ли глобальная политика автозагрузки? Ответы на них обычно приводят к решению.
Источники
- The Complete Guide to Debugging X++ in Dynamics 365 Finance & Operations
- https://itecnote.com/tecnote/visual-studio-symbol-loading-disabled-by-include-exclude-setting/
- https://stackoverflow.com/questions/51020340/symbol-loading-disabled-by-include-exclude-setting
- https://stackoverflow.com/questions/79810943/why-does-visual-studio-mention-the-symbol-loading-to-be-disabled-by-include-excl
- https://mngb.ru/informatsiya/31/kak-zapustit-debag-v-visual-studio
Заключение
Коротко: сообщение “Загрузка символов отключена параметром включения/исключения” — обычно информативное и связано с политикой Symbols в Visual Studio (по умолчанию системные DLL исключены). Исправить можно двумя путями: изменить глобальную опцию (включить попытку загрузки для всех модулей, кроме явно исключённых) или вручную загрузить нужный PDB через окно Modules; параллельно проверьте, что PDB действительно сгенерирован и соответствует загруженному модулю. visual studio загрузка символов — решается обычно сочетанием смены политики и проверки PDB.