У меня есть запасной сервер в сети, на котором я хотел бы разместить все наши символы сборки. Я уже знаю, как настроить кэш символов в моей локальной системе разработки и указать моему отладчику (например, Windbg) на этот путь в «Путь к символьному файлу». Я предположил, что я мог бы сделать то же самое с другой системой в сети, которая имеет свой собственный кэш символов (например, \\ хост \ символы).
Я настроил сервер и включил общий доступ к файлам в каталоге, чтобы иметь возможность удаленного доступа к нему через проводник Windows. Однако, когда я пытаюсь указать на него в WinDbg, он, кажется, не подхватывает символы там.
Путь к символьному файлу устанавливается следующим образом:
srv*\\192.168.1.20\symbolpath*http://msdl.microsoft.com/download/symbols
Кажется, что я не настраиваю его правильно на сервере — есть ли шаг, который я могу пропустить?
Есть несколько вещей, которые нужно знать при настройке сервера символов и / или общего ресурса сети символов.
Символы ищутся в пути символа от начала до конца, то есть в пути символа C:\a;C:\b
будет сначала заглядывать в C:\a
а затем в C:\b
, Хотя это не имеет большого значения, это сильно влияет на производительность. Если у вас есть свои собственные символы, всегда ставьте их на первое место, чтобы сохранить обратную передачу HTTP на сервер Microsoft.
Существует три типа магазинов символов:
У вас может быть три типа хранилищ символов, и вы не должны смешивать их в одном каталоге:
<filename>.pdb\<hash>\<filename>.pdb
, Вы узнаете двухуровневое хранилище символов из существующего пустого (0 байт) pingme.txt
файл и 000Admin
папка. Не удаляйте их.<fi>\<filename>\<hash>\<filename>.pdb>
, Вы узнаете трехуровневое хранилище символов из пустого (0 байт) index2.txt
файл. Не удаляйте это. Предполагается, что 3-х уровневый магазин увеличит производительность.Вы можете поместить символы из 0-уровневого магазина в 2- или 3-уровневый магазин, используя symstore.exe
который поставляется с WinDbg.
Вы можете преобразовать 2-х уровневый магазин в 3-х уровневый магазин, используя convertstore.exe
, В случае ошибок, см. Мою статью Ошибки Convertstore.
То, что вы настроили, это не сервер символов, это хранилище символов сервера, потому что вы используете (и хотите использовать) сетевой ресурс, а не веб-сервер HTTP. Ниже приведены шаги для его настройки:
symstore add /3 /f "Filename.pdb" /s "\\server\symbols" /t "Title"
если вы хотите добавить символы с другого компьютера или использовать /s "C:\share\symbols"
если вы добавите их локально.Повторите шаг 3 для всех версий файлов PDB, которые вы хотите добавить. Вы также можете использовать подстановочные знаки, такие как *.pdb
, В идеале вы интегрируете этот шаг в процесс сборки.
Из соображений производительности разработчики хотят локально кэшировать ваши собственные символы из сети, а также символы Microsoft. Поэтому давайте сначала создадим такой локальный кеш:
.sympath cache*C:\Symbols
Я обычно позволяю папке кеша сжиматься NTFS, потому что символы сжимаются довольно хорошо.
Далее, давайте сначала найдем собственные символы, чтобы избежать поездки в Microsoft:
.sympath+ \\server\symbols
Наконец, попробуйте скачать все остальное от Microsoft:
.symfix+
Если вы немного узнаете о WinDbg Workspaces, вы можете сохранить настройку пути символа в рабочей области, чтобы вам не приходилось вводить все это в каждом сеансе отладки. К сожалению, это не работает, если вы поместите все это в одну строку, разделенную точкой с запятой (я не очень понимаю, почему), но вы можете ввести .sympath
сейчас и скопируйте результат. Так должно быть
cache*c:\symbols;\\server\symbols;SRV*http://msdl.microsoft.com/download/symbols
Я не мог воспроизвести это сейчас, но я помню некоторые проблемы. Причина была в следующем: WinDbg не будет запрашивать учетные данные при доступе к сетевому ресурсу. Обходной путь: если вы не получаете символы от \\server\symbols
откройте эту сетевую папку в Windows Explorer. Explorer запросит учетные данные, и они будут кэшироваться Windows и, таким образом, будут использоваться WinDbg неявно.