_NT_SYMBOL_PATH формат - PullRequest
       7

_NT_SYMBOL_PATH формат

30 голосов
/ 09 июня 2009

Я пытаюсь использовать windbg больше, и у меня продолжают возникать проблемы с кэшем символов. Мне не ясно, каким должен быть формат строки.

У меня есть несколько требований:

  • использовать сервер Microsoft http://msdl.microsoft.com/download/symbols
  • используйте символы из нашего программного обеспечения, которые заархивированы в \\ foo \ Build1234
  • использовать локальный кеш на c: \ dev \ symbols

Архив символов из нашей распределенной сборки в \\ foo \ Build1234 не организован как сервер символов. Если я правильно понимаю, мне нужно использовать ключевое слово cache.

Учитывая эти требования, выглядит ли это как правильно отформатированный srvpath:

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols

Edit:

Я только начал читать Advanced Windows Debugging и неправильно понял, как работает ключевое слово cache. Я подумал, что это способ сообщить отладчику, что папка - это просто папка с файлами, а не сервер символов. После того как Майкл оставил свой комментарий, я перечитал этот раздел и увидел, что он действительно работает так, как описал Майкл.

Теперь меня смущает, когда вы используете; или * для разделения путей / URL. И когда вам нужен префикс srv *. В онлайн-справке для windbg они приводят этот пример:

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached

Символы из \\ someshare не кэшируются, символы от Microsoft кэшируются в c: \ mysymbols, а c: \ mysymbols используется в качестве кэша для любых других путей справа от директивы cache *.

Случайное использование srv * сбивает меня с толку - я не понимаю, почему первый и последний пути не начинаются с префикса srv *.

Редактировать 2:

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

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols

Ответы [ 2 ]

38 голосов
/ 09 июня 2009
SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234

Должно работать нормально, если \\foo\build1234 - это просто плоские PDB. Кэш здесь не нужен; вам просто нужно добавить каталог к ​​вашему символьному пути.

Ключевое слово cache указывает, куда вы хотите кэшировать файлы символов, и полезно для локального кэширования символов из неиндексированных общих ресурсов (например, \\foo\build1234)

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234

Приведенный выше путь будет хранить символы с сервера символов MS и общий доступ к вашим символам на вашем локальном компьютере в C: \ dev \ символы.

Чтобы устранить проблемы с символами с помощью windbg, выполните

!sym noisy
.reload <some exe or DLL in your session>

А затем выполните какое-либо действие, которое приведет к загрузке PDB. Вы увидите, где windbg ищет файлы, и если он отклоняет PDB, почему он это сделал.

!sym quiet

Затем подавит подсказки символов.

2 голосов
/ 17 октября 2013

Вот подробный пост по вопросам отладки с загрузкой символов.

Загрузка символов в Windbg

...