Использование SymSrv

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

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

SymSrv также может разделить большое хранилище символов в меньшее подмножество, подходящее для специализированной задачи отладки.

Наконец, SymSrv может получить файлы символов из источника HTTP или HTTPS с помощью сведений о входе, предоставляемых операционной системой. SymSrv поддерживает сайты HTTPS, защищенные интеллектуальными карта, сертификатами и обычными именами входа и паролями.

Задание пути символа

Как описано в схемах символов, путь к символам (переменная среды _NT_SYМБOL_PATH) может быть состоит из нескольких элементов пути, разделенных точкой с запятой. Если любой из этих элементов пути начинается с текста "srv*", элемент является сервером символов и будет использовать SymSrv для поиска файлов символов.

Примечание.

Если текст "srv*" не указан, но фактический элемент пути является хранилищем сервера символов, обработчик символов будет действовать так, как если бы были указаны "srv*". Обработчик символов делает это определение путем поиска существования файла с именем "pingme.txt" в корневом каталоге указанного пути.

 

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

srv\*SymbolStore* srv\*SymbolStore1*\*SymbolStoreN*

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

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

Если существует более двух хранилищ, это поведение продолжается справа до тех пор, пока файл не найден или нет больше хранилищ в списке.

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

Типы хранилищ символов

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

Тип хранилища символов Description
\\server\share Полный UNC-путь к общей папке на удаленном сервере.
c:\LocalCache Путь к каталогу на клиентском компьютере.
https://InternetSite URL-адрес веб-сайта, на котором размещены символы. Должно быть самым правым хранилищем в списке и не должно быть единственным хранилищем в списке.
https://SecureInternetSite URL-адрес безопасного веб-сайта, на котором размещены символы. Это может поддерживать пароли, учетные данные входа Windows, сертификаты и интеллектуальные карта. Должно быть самым правым хранилищем в списке и не должно быть единственным хранилищем в списке.
<пусто> Если между двумя звездочками нет текста, это указывает на нижнее хранилище по умолчанию. Расположение устанавливается путем вызова SymSetHomeDirectory. Значение по умолчанию — это каталог с именем "sym" сразу под каталогом программы вызывающего приложения. Иногда это называется локальным кэшем по умолчанию.

 

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

Примеры

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

set _NT_SYМБOL_PATH= srv*\\mybuilds\mysymbols

Чтобы задать путь к символам, чтобы отладчик скопирует файлы символов из хранилища символов в папку \\mysymbols\mysymbols в локальный каталог c:\localsymbols, используйте следующую команду:

set _NT_SYМБOL_PATH=srv*c:\localsymbols*\mybuilds\mysymbols

Чтобы задать путь к символам, чтобы отладчик скопирует файлы символов из хранилища символов в \\mybuilds\mysymbols в нижнее хранилище по умолчанию (обычно c:\debuggers\sym), используйте следующее:

set _NT_SYМБOL_PATH=srv**\mybuilds\mysymbols

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

set _NT_SYМБOL_PATH = srv*c:\localsymbols*\\NearbyServer\store*https://DistantServer

В этом примере SymSrv сначала ищет файл в C:\localsymbols. Если он найден там, он вернет путь к файлу. В противном случае SymSrv ищет файл в папке \\NearbyServer\store. Если он найден там, SymSrv копирует файл в c:\localsymbols и возвращает путь к файлу; Если он не найден, SymSrv ищет файл в https://DistantServer, и если он найден там, SymSrv копирует файл в \\NearbyServer\store, а затем в c:\localsymbols.

В этом последнем примере показано, как разумное проектирование пути символов можно использовать для оптимизации загрузки символов. Если у вас есть рабочий сайт с группой отладчиков, и все они должны получить символы из удаленного расположения, вы можете настроить общий сервер с хранилищем символов рядом со всеми отладчиками. Затем настройте каждый отладчик с указанным выше путем символа. Первый отладчик, требующий определенной версии foo.pdb, скачивает его из https://DistantServer \\NearbyServer\store, а затем на собственный компьютер в c:\localsymbols. Следующий отладчик, требующий того же файла, сможет скачать его из \\NearbyServer\store, так как он уже скачан в это расположение предыдущим отладчиком. Это многоуровневое кэширование экономит значительное время и пропускную способность сети.

Microsoft Symbol Store

Корпорация Майкрософт предоставляет доступ к серверу символов Интернета, который содержит файлы символов для многих версий операционной системы Windows. Этот каталог символов не гарантируется завершенным, но он является обширным. Также представлены другие продукты Майкрософт.

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

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

URL-адрес для хранилища https://msdl.microsoft.com/download/symbolsсимволов Майкрософт. В следующем примере показано, как задать путь символа отладчика (замените путь нижестоящего хранилища для c:\DownstreamStore):

srv*c:\DownstreamStore*https://msdl.microsoft.com/download/symbols

Сжатые файлы

SymSrv совместим с хранилищами символов, содержащими сжатые файлы, если это сжатие было предварительно сформировано с помощью средства compress.exe, распределенного с набором ресурсов Windows Server 2003. Сжатые файлы должны иметь знак подчеркивания в качестве последнего символа в расширениях файлов (например, module1.pd_ или module2.db_). Дополнительные сведения см. в разделе "Использование SymStore".

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

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

Удаление кэша

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

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

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

Каталог неструктурированного кэша

Можно объявить нижнее хранилище по умолчанию как неструктурированный каталог, а не стандартную структуру дерева символов. Для этого вызовите функцию SymSetOptions с SYMOPT_FLAT_DIRECTORY (это также задает параметр SSRVOPT_FLAT_DEFAULT_STORE в SymSrv). Перед этим обязательно вызовите SymSetHomeDirectory . В противном случае файлы символов можно записать в каталог программы.

Файлы указателя

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

Исключение файлов из списка символов

Чтобы исключить файлы из поиска символов, можно указать их имена в symsrv.ini или в реестре. Чтобы указать файлы в symsrv.ini, создайте раздел с именем "Исключения" и перечислите их. Имена файлов могут содержать дикие карта, как показано в следующем примере:

[Exclusions]
dbghelp.pdb
symsrv.*
mso*

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

Кроме того, можно сохранить файлы, которые будут исключены в реестре. Создайте следующий раздел реестра: HKEY_LOCAL_MACHINE\Software\Microsoft\Symbol Server\Exclusions. Сохраните каждое имя файла в виде строкового значения (REG_SZ) в этом ключе. Имя строкового значения указывает имя файла, который необходимо исключить. Содержимое строкового значения можно использовать для хранения комментариев, описывающих, почему файл исключается.

Установка

Сервер символов SymSrv (symsrv.dll) включен в пакет средств отладки для Windows. Он должен быть установлен в том же каталоге, что и копия dbghelp.dll, которую вы загружаете. Дополнительные сведения см. в статье "Вызов библиотеки DbgHelp".