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


Путь к символам для отладчиков Windows

Путь к символам указывает расположения, в которых отладчики Windows, такие как WinDbg, KD, CDB и NTST, ищут файлы символов. Дополнительные сведения о символах и файлах символов см. в разделе "Символы".

Некоторые компиляторы, включая Microsoft Visual Studio, помещают файлы символов в тот же каталог, что и двоичные файлы. Файлы символов и проверенные двоичные файлы содержат сведения о пути и имени файла, что позволяет отладчику автоматически находить файлы символов. При отладке процесса пользовательского режима на компьютере, где был создан исполняемый файл, и если файлы символов находятся в исходном расположении, отладчик может найти файлы символов, не задав путь к символам.

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

Совет

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

Синтаксис пути к символам

Путь к символу отладчика — это строка, состоящая из нескольких путей каталога, разделенных точкой с запятой. Например, C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB.

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

Для каждого каталога в пути к символам отладчик выглядит в трех каталогах. Например, если путь к символам включается C:\Dir1 и отладчик ищет сведения о символах для библиотеки DLL, отладчик ищет сведения о символах в следующих каталогах, указанных в порядке:

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

Затем отладчик повторяет этот процесс для каждого каталога в пути к символам. Наконец, отладчик выглядит в текущем каталоге, а затем в текущем каталоге с ..\dll добавленным к нему. Отладчик добавляет ..\dllили ..\exe..\sysв зависимости от того, какие двоичные файлы она выполняет отладку.

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

Один из способов задать путь к символам — ввести команду Sympath. Другие способы задания пути символа см. в разделе "Управление путь к символам" далее в этом разделе.

Локальные символы кэша

Вы должны кэшировать символы локально. Одним из способов локального кэширования символов является включение cache*; или cache*localsymbolcache;* путь к символам.

Если вы включаете строку cache*; в путь к символам, символы, загруженные из любого элемента, который отображается справа от этой строки, хранятся в каталоге кэша символов по умолчанию на локальном компьютере. Например, следующая команда сообщает отладчику получить символы из сетевой общей папки с именем \\someshare и кэшировать символы в расположении по умолчанию на локальном компьютере.

.sympath cache*;\\someshare

Если вы включаете строку cache*localsymbolcache; в путь к символам, символы, загруженные из любого элемента, который отображается справа от этой строки, хранятся в каталоге localsymbolcache .

Например, следующая команда сообщает отладчику получить символы из общей сетевой папки \\someshare и кэшировать символы в каталоге c:\MySymbols .

.sympath cache*C:\MySymbols;\\someshare

Использование сервера символов: srv*

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

  • srv* Строка

    При включении строки srv* в путь к символам отладчик использует сервер символов для получения символов из хранилища символов по умолчанию. Например, следующая команда сообщает отладчику получить символы из хранилища символов по умолчанию. Эти символы не кэшируются на локальном компьютере.

    .sympath srv*
    
  • srv*symbolstore Строка

    Если вы включаете строку srv*symbolstore в путь к символам, отладчик использует сервер символов для получения символов из хранилища символов. Например, следующая команда сообщает отладчику получить символы из хранилища сервера символов Майкрософт. Эти символы не кэшируются на локальном компьютере.

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • srv*localsymbolcache*symbolstore Строка

    При включении строки srv*localcache*symbolstore в путь к символам отладчик использует сервер символов для получения символов из хранилища символов и кэширует их в каталоге localcache . Например, следующая команда сообщает отладчику получать символы с сервера символов Майкрософт иhttps://msdl.microsoft.com/download/symbols кэшировать символы в c:\MyServerSymbols.

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

Если у вас есть каталог на компьютере, где вы вручную помещаете символы, не используйте этот каталог в качестве кэша для символов, полученных с сервера символов. Вместо этого используйте два отдельных каталога. Например, можно вручную поместить символы, а затем назначить c:\MyServerSymbols в качестве кэша для символовc:\MyRegularSymbols, полученных с сервера. В следующем примере показано, как указать оба каталога в пути к символам.

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

Дополнительные сведения о серверах символов и хранилищах символов см. в разделе "Пользовательские хранилища символов" и "Серверы символов".

Объединение кэша* и srv*

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

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

Если вы включаете строку cache*localsymbolcache; в путь к символам, символы, загруженные из любого элемента, который отображается справа от этой строки, хранятся в каталоге localsymbolcache .

Например, следующая команда сообщает отладчику получить символы из хранилища сервера символов Майкрософт и кэшировать символы в каталоге c:\MySymbols .

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

Использование AgeStore для уменьшения размера кэша

Средство AgeStore можно использовать для удаления кэшированных файлов, которые старше указанной даты, или для удаления достаточно старых файлов, чтобы результирующий размер кэша был меньше указанного объема. Эта очистка файлов кэша полезна, если нижнее хранилище становится слишком большим.

Отложенная загрузка символов

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

При изменении пути к символам, например с помощью команды Sympath, все загруженные модули с символами экспорта загружаются безумно перезагружаются.

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

Вы можете отключить отложенную загрузку символов в CDB и KD с помощью параметра командной строки -s. Вы также можете принудительно загрузить символы с помощью команды ld load symbols или с помощью команды модуля RELOAD вместе с параметром /f .

Артефакты Azure DevOps Services

Сервер символов доступен в Azure Artifacts в Azure DevOps Services. Сведения о работе с артефактами Azure в WinDbg см. в статье Отладка с символами в WinDbg. Общие сведения о созданных Azure символах см. в обзоре символов.

Управление путьом к символам

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

  • Используйте команду путь к хранилищу символов symfix, чтобы задать путь по умолчанию на общедоступный сервер символов Майкрософт, который хорошо работает во многих ситуациях. Чтобы задать локальный кэш, просто введите .symfix C:\MyCache.

  • Используйте команду Sympath для отображения, задания, изменения или добавления в путь.

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

  • При запуске отладчика используйте параметр командной строки -y, чтобы задать путь.

  • Только в WinDbg можно использовать файл | Команда "Путь к файлу символа" или нажатие клавиши CTRL+S для отображения, задания, изменения или добавления в путь.

Если вы используете параметр командной строки -sins, отладчик игнорирует переменную среды пути символа.

Устранение неполадок

Используйте !sym шумный или параметр командной строки -n WinDbg для отображения дополнительных сведений при загрузке символов. Дополнительные стратегии устранения неполадок см. в разделе "Проверка символов".

См. также

Символы

Расширенное использование SymSrv

Команда Sympath

.symfix