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


Укажите символы (PDB) и исходные файлы в отладчике Visual Studio (C#, C++, Visual Basic, F#)

Файлы программы базы данных (.pdb), также называемые файлами символов, сопоставляют идентификаторы и операторы в исходном коде вашего проекта с соответствующими идентификаторами и инструкциями в скомпилированных приложениях. Эти файлы сопоставления связывают отладчик с исходным кодом, который обеспечивает отладку.

При сборке проекта из интегрированной среды разработки Visual Studio с стандартной конфигурацией сборки отладки компилятор создает соответствующие файлы символов. В этой статье описывается управление файлами символов в интегрированной среде разработки, например:

Подробное описание файлов символов см. в следующих статьях:

Как работают файлы символов

PDB-файл содержит сведения об отладке и состоянии проекта, которые позволяют добавочно связывать конфигурацию отладки приложения. Отладчик Visual Studio использует PDB-файлы для определения двух ключевых элементов информации при отладке:

  • Имя исходного файла и номер строки для отображения в интегрированной среде разработки Visual Studio.
  • Где в приложении установить точку останова.

Файлы символов также показывают расположение исходных файлов и, при необходимости, сервер, из которого они извлекаются.

Отладчик загружает только PDB-файлы , которые точно соответствуют PDB-файлам , созданным при построении приложения (то есть исходных PDB-файлов или копий). Это точное дублирование необходимо, так как макет приложений может измениться, даже если сам код не изменился. Дополнительные сведения см. в статье "Почему Visual Studio требует файлов символов отладчика точно совпадать с двоичными файлами, с помощью которых они были созданы?

Подсказка

Чтобы отлаживать код вне исходного кода вашего проекта, например код Windows или сторонний код, вызываемый вашим проектом, необходимо указать расположение PDB-файлов внешнего кода (и, при необходимости, исходных файлов), которые должны точно соответствовать сборкам в вашем приложении.

Где отладчик ищет символы

При отладке проекта в интегрированной среде разработки Visual Studio отладчик автоматически загружает файлы символов, которые он может найти по умолчанию.

Замечание

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

Отладчик ищет файлы символов в следующих расположениях:

  1. Папка проекта.

  2. Расположение, указанное внутри dll-файла или исполняемого файла (.exe) .

    По умолчанию, если вы создали библиотеку DLL или файл.exe на компьютере, линкер помещает полный путь и имя файла связанного файла PDB в библиотеку DLL или файл.exe. Отладчик проверяет наличие файла символов в этом расположении.

  3. Та же папка, что и файл DLL или .exe .

  4. Все расположения, указанные в параметрах отладчика для файлов символов. Сведения о добавлении и включении расположений символов см. в разделе "Настройка расположений символов" и "Параметры загрузки".

    • Любая папка кэша локальных символов.

    • Указанная сеть, интернет или локальные серверы символов и местоположения, например, серверы символов Майкрософт, если выбраны. Visual Studio может скачать файлы символов отладки с серверов символов, реализующих symsrv протокол. Visual Studio Team Foundation Server и средства отладки для Windows — это два средства, которые могут использовать серверы символов.

      Серверы символов, которые можно использовать, включают:

      Общедоступные серверы символов Майкрософт: для отладки сбоя, возникающего во время вызова системной библиотеки DLL или в стороннюю библиотеку, часто требуется системные PDB-файлы . Системные PDB-файлы содержат символы для библиотек DLL Windows, .exe файлов и драйверов устройств. Вы можете получить символы для операционных систем Windows, MDAC, IIS, ISA и .NET с общедоступных серверов символов Майкрософт.

      Серверы символов в внутренней сети или на локальном компьютере: ваша команда или компания могут создавать серверы символов для собственных продуктов и в качестве кэша для символов из внешних источников. У вас может быть собственный сервер символов.

      Сторонние серверы символов: сторонние поставщики приложений и библиотек Windows могут предоставлять доступ к серверу символов в Интернете.

Предупреждение

Если вы используете сервер символов, отличный от общедоступных серверов символов Майкрософт, убедитесь, что сервер символов и его путь являются надежными. Так как файлы символов могут содержать произвольный исполняемый код, вы можете быть подвержены угрозам безопасности.

Настройка расположения файлов символов и параметров загрузки

Отладчик проверяет различные расположения символов по умолчанию. См. раздел "Где отладчик ищет символы".

На странице инструментов>"Параметры>отладки> символов" можно:

  • Укажите и выберите пути поиска для файлов символов.
  • Укажите серверы символов для компонентов Microsoft, Windows или сторонних производителей.
  • Выберите модули, для которых вы хотите или нет, чтобы отладчик автоматически загружал символы.
  • Измените эти параметры во время активной отладки. Смотрите Загрузка символов при отладке.

Чтобы указать расположения символов и параметры загрузки:

Замечание

Эти параметры были обновлены в Visual Studio 2022 версии 17.12 ( предварительная версия 1).

  1. В Visual Studio откройте Инструменты>Параметры>Отладка>Символы (или Отладка>Параметры>Символы).

  2. В разделе расположения файла символов (PDB)

    • Чтобы использовать серверы символов Майкрософт или сервер символов NuGet.org, установите флажок.

    • Чтобы добавить новую директорию сервера символов,

      1. + Выберите символ на панели инструментов.
      2. Введите URL-адрес (http), сетевую папку или локальный путь к серверу символов или расположению символов в текстовом поле. Завершение предложения помогает найти правильный формат.

    Сервис — параметры — отладка — страница символов

    Сервис — Параметры — Отладка — Страница символов

    Замечание

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

    • Чтобы добавить новое расположение сервера символов Azure DevOps, выполните приведенные действия.

      1. Выберите значок Инструменты - Параметры - Отладка - Символы - новый сервер на панели инструментов.

      2. В диалоговом окне "Подключение к серверу символов Azure DevOps" выберите один из доступных серверов символов и нажмите кнопку "Подключить".

        Дополнительные сведения см. в разделе "Добавление сервера символов артефактов Azure".

    • Чтобы изменить порядок загрузки для расположений символов, используйте клавиши CTRL+ВВЕРХ и CTRL+ВНИЗ, а также значки стрелки ВВЕРХ и ВНИЗ .

    • Чтобы изменить URL-адрес или путь, дважды щелкните запись или выберите ее и нажмите клавишу F2.

    • Чтобы удалить запись, выберите ее и щелкните - значок.

  3. (Необязательно) Чтобы повысить производительность загрузки символов, в разделе "Символы кэша" в этом каталоге введите путь к локальной папке, в который серверы символов могут копировать символы.

Замечание

Не помещайте локальный кэш символов в защищенную папку, например C:\Windows или вложенную папку. Вместо этого используйте папку чтения и записи.

Замечание

Если задана переменная среды _NT_SYMBOL_PATH, она переопределяет значение, указанное в параметре Символы кэша в этом каталоге.

  1. Укажите модули, которые нужно загрузить отладчику из расположений файла символов (PDB) при запуске.

    • Выберите автоматический выбор символов модуля для поиска (рекомендуется), чтобы разрешить Visual Studio самостоятельно решать, какие символы искать и загружать. По умолчанию Visual Studio автоматически загружает символы, созданные открытым решением, и загружает все дополнительные символы, необходимые для выполнения общих операций отладки. Это сокращает количество файлов, которые необходимо искать и загружать в Visual Studio, что повышает производительность отладчика. Вы можете принудительно загрузить дополнительные символы, щелкнув ссылку "Указать фильтры модулей ".

    • Выберите Поиск всех символов модуля, если это не исключено, чтобы принудительно загрузить все символы в процессе отладки Visual Studio. Это не рекомендуется, так как это может замедлить отладку. Если выбрать этот параметр, вы можете принудительно игнорировать определенные символы Visual Studio, щелкнув ссылку "Указать фильтры модулей ".

    • Выберите "Загрузить все модули, если не исключено" (вариант по умолчанию), чтобы загрузить все символы для всех модулей в расположении файла символов, кроме модулей, которые вы специально исключили. Чтобы исключить некоторые модули, выберите " Указать исключенные модули", щелкните + значок, введите имена модулей, чтобы исключить, и нажмите кнопку "ОК".

    • Чтобы загрузить только модули, которые вы определите из расположений файлов символов, выберите "Загрузить только определенные вами модули". Выберите "Указать включенные модули", выберите + значок, введите имена модулей, которые нужно включить, и нажмите кнопку "ОК". Файлы символов для других модулей не загружаются.

  2. Нажмите ОК.

Определение фильтров модулей

Обе опции Автоматически выбирать, какие символы модуля искать и Искать все символы модуля, если они не исключены обеспечивают более точный контроль над поиском символов при отладке. Выберите "Указать фильтры модулей" , чтобы точно настроить интерфейс.

По умолчанию отображается следующее диалоговое окно при автоматическом выборе символов модуля для поиска :

Снимок экрана: задание фильтров модулей.

Модуль можно добавить в фильтр с помощью значка "+". Фильтры модулей поддерживают простое шаблонное сопоставление. Значение "*" соответствует любой группе символов. Например, "*myproduct*" будет соответствовать файлам, таким как "myproduct.utilities.dll" и "entrypoint.myproduct.exe", среди прочего.

Существует несколько дополнительных параметров для дальнейшей настройки интерфейса.

  • Всегда загружайте символы, расположенные рядом с модулями , предписывает Visual Studio загружать PDB-файлы, хранящиеся в файловой системе рядом с соответствующими .dll или .exe файлами. Это может быть полезно, например при попытке отладки развернутого веб-приложения.

  • Автоматическая загрузка дополнительных символов при необходимости указывает Visual Studio искать символы для выполнения общих действий отладки, таких как пошаговая отладка, даже если модуль, к которому вы хотите перейти, отсутствует в вашем проекте или в фильтре модулей. Способ определения поиска может повлиять на параметры Just My Code .

Если вы выбрали поиск всех символов модуля, если они не исключены, диалоговое окно фильтра модуля выглядит следующим образом:

Снимок экрана: указание исключенных модулей.

В этом диалоговом окне можно выбрать модули, для которого не нужно загружать символы Visual Studio. В этом сценарии Visual Studio пытается загрузить символы для каждого модуля в отлаживаемом процессе (включая модули сторонних производителей), если не добавить фильтр для их исключения. Единственным другим способом изменения этого поведения являются ваши параметры Just My Code.

Другие параметры символов для отладки

Дополнительные параметры символов можно выбрать в разделе Инструменты>Параметры>Отладка>Общие (или Отладка>Параметры>Общие).

  • Загрузка экспорта DLL (только для нативных систем)

    Загружает таблицы экспорта DLL для C/C++. Дополнительные сведения см. в таблицах экспорта DLL. Чтение сведений о экспорте библиотеки DLL включает некоторые издержки, поэтому загрузка таблиц экспорта отключена по умолчанию. Вы также можете использовать dumpbin /exports в командной строке сборки C/C++.

  • Включение отладки на уровне адресов и отображение дизассембли, если источник недоступен

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

    Параметры / Отладка / Общие параметры дизассемблирования

  • Включение поддержки исходного сервера

    Использует исходный сервер для отладки приложения, если на локальном компьютере нет исходного кода, или PDB-файл не соответствует исходному коду. Исходный сервер обрабатывает запросы на файлы и возвращает актуальные файлы из системы управления исходным кодом. Исходный сервер выполняется с помощью библиотеки DLL с именемsrcsrv.dll для чтения PDB-файла приложения. PDB-файл содержит указатели на репозиторий исходного кода, а также команды, используемые для получения исходного кода из репозитория.

    Вы можете ограничить команды, которые srcsrv.dll может выполнять из PDB-файла приложения, перечислив разрешенные команды в файле с именем srcsrv.ini. Поместите файлsrcsrv.ini в ту же папку, что и srcsrv.dll и devenv.exe.

    Это важно

    Произвольные команды могут быть внедрены в PDB-файл приложения, поэтому не забудьте поместить только команды, которые необходимо выполнить в файл srcsrv.ini . Любая попытка выполнить команду, не в файлеsrcsvr.ini , приведет к отображению диалогового окна подтверждения. Дополнительные сведения см. в разделе "Предупреждение системы безопасности: отладчик должен выполнить ненадежную команду".

    Проверка не выполняется для параметров команды, поэтому будьте осторожны с доверенными командами. Например, если вы указали cmd.exe в srcsrv.ini, злоумышленник может указать параметры в cmd.exe , что сделает его опасным.

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

    Включение параметров исходного сервера

Параметры символов компилятора

При создании проекта из интегрированной среды разработки Visual Studio с стандартной конфигурацией сборки отладки C++ и управляемые компиляторы создают соответствующие файлы символов для кода. Можно также задать параметры компилятора в коде.

Сведения о настройке параметров компилятора для конфигураций сборки в Visual Studio см. в разделе "Настройка конфигураций отладки и выпуска".

Параметры .NET

Выполните сборку с помощью /debug , чтобы создать PDB-файл . Вы можете создавать приложения с помощью /debug:full или /debug:pdbonly. Сборка с использованием /debug:full создает отладочный код. Сборка с /debug:pdbonly создает PDB-файлы, но не генерирует информацию, которая сообщает компилятору JIT, что сведения об отладке доступны. Используйте /debug:pdbonly, если вы хотите создать .pdb-файлы для финальной сборки, которую не требуется отлаживать. Дополнительные сведения см. в разделе /debug (параметры компилятора C#) или /debug (Visual Basic).

Параметры C/C++

  • Файлы VC<x.pdb> и <project.pdb>

    PDB-файл для C/C++ создается при сборке с /ZI или /Zi. В Visual C++параметр /Fd называет PDB-файл , который создает компилятор. При создании проекта в Visual Studio с помощью интегрированной среды разработки параметр /Fd устанавливается для создания PDB-файла с именем <project.pdb>.

    Если вы создаете приложение C/C++ с помощью файла makefile и указываете /ZI или /Zi без использования /Fd для указания имени файла, компилятор создает два PDB-файла :

    • VC<x.pdb>, где <x> представляет версию компилятора Microsoft C++, например VC11.pdb

      Файл VC<x.pdb> хранит все сведения об отладке для отдельных файлов объектов и находится в том же каталоге, что и файл makefile проекта. Каждый раз, когда он создает файл объекта, компилятор C/C++ объединяет сведения отладки в VC<x.pdb>. Таким образом, даже если каждый исходный файл содержит общие файлы заголовков, такие как <windows.h>, типдефы из этих заголовков хранятся только один раз, а не в каждом файле объекта. Вставленная информация содержит сведения о типе, но не включает сведения о символах, такие как определения функций.

    • <project.pdb>

      Файл <project.pdb> хранит все данные отладки для файла.exe проекта и находится в подкаталоге \debug. Файл <project.pdb> содержит полные сведения об отладке, включая прототипы функций, а не только сведения о типе, найденные в VC<x.pdb>.

    Файлы VC<x.pdb> и <project.pdb> разрешают добавочные обновления. Компоновщик также внедряет путь к .pdb-файлу в файл .exe или .dll, который он создает.

  • Таблицы экспорта DLL

    Используйте dumpbin /exports для просмотра символов, доступных в таблице экспорта библиотеки DLL. Символическая информация из таблиц экспорта DLL может быть полезна для работы с сообщениями Windows, процедурами окон (WindowProcs), COM-объектами, маршалингом или любой DLL, для которых нет символов. Символы доступны для любой 32-разрядной библиотеки DLL системы. Вызовы перечислены в порядке вызова с текущей функцией (наиболее глубоко вложенной) в верхней части.

    Считывая dumpbin /exports данные, вы можете увидеть точные имена функций, включая небуквенно-цифровые символы. Видение точных названий функций полезно для установки точки останова функции, потому что названия функций могут быть усечены в других частях отладчика. Дополнительные сведения см. в разделе dumpbin /exports.

Веб-приложения

Установите для файла web.config приложения ASP.NET режим отладки. Режим отладки приводит к тому, что ASP.NET создавать символы для динамически созданных файлов и позволяет отладчику подключаться к приложению ASP.NET. Visual Studio устанавливает это автоматически при запуске отладки, если вы создали проект из шаблона веб-проектов.

Загрузка символов при отладке

Вы можете использовать модули, стек вызовов, локальные параметры, авто или любое окно наблюдения для загрузки символов или изменения параметров символов во время отладки. Дополнительные сведения см. в статье Узнайте, как отладчик подключается к приложению.

Работа с символами в окне "Модули"

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

Чтобы отслеживать или изменять расположения символов или параметры при отладке:

  1. Чтобы открыть окно "Модули" во время отладки, выберите Отладка>Окна>Модули (или нажмите CTRL + +ALT + +U).
  2. В окне "Модули" щелкните правой кнопкой мыши заголовки " Состояние символов" или " Файл символов " или любой модуль.
  3. В контекстном меню выберите один из следующих вариантов:
Вариант Описание
Загрузка символов Отображается для модулей с пропущенными, не найденными или не загруженными символами. Пытается загрузить символы из расположений, указанных на странице " Параметры>отладки>символов ". Если файл символов не найден или не загружен, запускает Проводник, чтобы указать новое место для поиска.
Сведения о загрузке символов Показывает расположение загруженного файла символов или расположения, которые были искомы, если отладчик не сможет найти файл.
Параметры символов Открывает страницу "Параметры>отладки>символов" , где можно изменять и добавлять расположения символов.
Всегда загружать автоматически Добавляет выбранный файл символов в список файлов, которые автоматически загружаются отладчиком.
Декомпиляция исходного кода в файл символов Для кода .NET можно выбрать этот параметр, а затем следуйте инструкциям в статье "Создание и внедрение источников для сборки".

Используйте страницы "No Symbols Loaded" и "No Source Loaded"

Для отладчика существует несколько способов взлома в код, который не имеет доступных символов или исходных файлов:

  • Погрузитесь в код.
  • Прервать код из точки останова или исключения.
  • Переключитесь на другой поток.
  • Измените кадр, дважды щелкнув по нему в окне стека вызовов.

В этом случае отладчик отображает страницы «Символы не загружены» или «Исходный код не загружен», чтобы помочь вам найти и загрузить необходимые символы или исходный код.

Страница без загруженных символов

Чтобы использовать страницу "Отсутствуют загруженные символы" для поиска и загрузки недостающих символов:

  • Чтобы изменить путь поиска, выберите невыбранный путь или выберите Новый путь или Новый путь VSTS и введите или выберите новый путь. Нажмите кнопку "Загрузить ", чтобы снова выполнить поиск путей и загрузить файл символов, если он найден.
  • Чтобы переопределить любые параметры символов и повторить поиск путей поиска, выберите "Обзор" и "Найти <исполняемое имя>". Файлы символов загружаются, если они найдены, или откроется Проводник, чтобы вручную выбрать файл символов.
  • Чтобы открыть страницу параметров символов для настройки поведения, выберите "Изменить параметры символов " (или выберите "Параметры>отладки>символов").
  • (Дополнительно) Чтобы отобразить дизассембли в новом окне один раз, выберите просмотр дизассембли или выберите диалоговое окно "Параметры ", чтобы задать параметр, чтобы всегда отображать дизассембли, когда исходные или символьные файлы не найдены. Дополнительные сведения см. в разделе "Просмотр кода дизассембли".
  • Чтобы отобразить местоположения поиска и результаты, разверните сведения о загрузке символов.
  • Для кода C# можно также декомпилировать исходный код на страницах 'Нет загруженных символов' или страницах 'Нет загруженного исходного кода'.

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

Чтобы добавить пути поиска исходного файла в решение, выполните следующие действия.

Можно указать расположения отладчика для поиска исходных файлов и исключить определенные файлы из поиска.

  1. Выберите решение в обозревателе решений, а затем щелкните значок "Свойства ", нажмите клавиши ALT+ВВОД или щелкните правой кнопкой мыши и выберите "Свойства".

  2. Выберите "Отладочные исходные файлы".

    Страница

  3. В каталогах, содержащих исходный код, введите или выберите расположения исходного кода для поиска. Используйте значок "Новая линия ", чтобы добавить дополнительные расположения, значки со стрелками ВВЕРХ и ВНИЗ , чтобы изменить их порядок, или значок X , чтобы удалить их.

    Замечание

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

  4. В разделе "Не искать эти исходные файлы" введите имена исходных файлов, чтобы исключить из поиска.

  5. Нажмите кнопку ОК или Применить.