Формат _NT_SYMBOL_PATH
Я пытаюсь использовать windbg больше, и у меня проблемы с кешем символов. Мне непонятно, какой должен быть формат строки.
У меня есть несколько требований:
- использовать сервер Microsoft http://msdl.microsoft.com/download/symbols
- используйте символы из нашего программного обеспечения, архивированные в \\foo\Build1234
- используйте локальный кеш в каталоге c:\dev\symbols
Архив символов из нашей распределенной сборки в \\foo\Build1234 не организован как сервер символов. Если я правильно понял, мне нужно использовать ключевое слово кеша.
Учитывая эти требования, похоже ли это как правильно отформатированный srvpath:
cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols
Edit:
Я только начал читать Advanced Windows Debugging, и я неправильно понял, как работает ключевое слово кеша. Я думал, что это способ сообщить отладчику, что папка - это просто папка файлов, а не сервер символов. После того, как Майкл оставил свой комментарий, я перечитал раздел и увидел, что он действительно работает, как описал Майкл.
Теперь я смущен, когда вы используете; или * для разделения путей/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
Ответы
Ответ 1
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\symbols.
Чтобы отлаживать проблемы символов с помощью windbg, do
!sym noisy
.reload <some exe or DLL in your session>
И затем выполните некоторые действия, которые заставят PDB быть загружены. Вы увидите, где windbg ищет файлы, и если он отклоняет PDB, почему он это сделал.
!sym quiet
Затем подавляет приглашения символов.
Ответ 2
Вот подробное сообщение об отладке проблем с загрузкой символов.
Загрузка символов в Windbg