2016-11-01 4 views
1

Используя окно символов (CTRL + S), я установил WinDbg для загрузки моих символов из определенного места.Windbg загружает символы из измененного местоположения

enter image description here

Теперь, когда я прикрепить мой отладчик и попытаться открыть окно стека, похоже, символы не очень загружены. !

enter image description here

Теперь, когда я использую SYM шумным команды и .reload/ф, я получаю следующую информацию от отладчика:

enter image description here

Таким образом, из третья картина, почему SYMSRV даже определен? и почему он добавляет префикс GUID в конец файла?

Это сработало бы, если бы не было того, что guid windgg добавляет к пути. Что я делаю не так.

EDIT: после просмотра журнала, кроме того, я вижу, что отладчик пытается загрузить символ с локального диска.

enter image description here

+0

У Windbg есть определенные пути поиска по умолчанию, он всегда будет искать символы в этом пути, если он не может найти символы в предпочтительном пути. В чем проблема? – blabb

+0

@blabb. Как уже упоминалось, я определил путь к символу и проверил, что доступ правдоподобен через сеть. но в соответствии с журналами windbg добавляет GUID к имени файла (я считаю, что он пытается загрузить его с помощью сервера символов Windows). –

+0

Что такое вывод '.sympath'? – conio

ответ

0

Есть несколько различных форматов, в которых символы могут быть сохранены. Это 0-ярусная, 2-ярусная и 3-ярусная.

0-уровневый - это в основном плоский список файлов, который подходит, если вы только что создали свою программу, и все PDB находятся в одной папке. Если вы вводите локальный путь, например, c:\path или общий ресурс сервера, как \\server, WinDbg должен рассмотреть макет хранилища 0-го уровня, но также может попробовать другие.

Проблема заключается в том, что вы можете хранить только одну версию PDB в 0-уровневом хранилище, поэтому существуют хранилища символов с 2 уровнями и 3 уровнями. Когда символы добавляются в такой магазин, он будет учитывать GUID, поэтому можно хранить несколько версий одной и той же программы. 2- и 3-ярусные хранилища символов должны начинаться с srv*. Точная разница между 2-уровневым и 3-ярусным магазином объясняется в канале 9 episode 87, и в 3-уровневый магазин можно разместить 2-уровневый магазин convert.

Не путайте синтаксис пути символа srv* с выходом отладки . IMHO SYMSRV: - это просто отладочное сообщение symsrv.dll, поэтому не о чем беспокоиться.

Истина о загрузке символов может отслеживаться только с помощью Process Monitor. Не все места, где WinDbg выполняет поиск символов, регистрируются даже в шумном режиме.

В дополнение к пути символа библиотеки DLL содержат ссылку на локальный путь PDB, и WinDbg рассмотрит этот путь, независимо от настроек пути символа.

+0

Возможно (я никогда не пробовал) вы можете отключить загрузку с пути DLL, установив '.symopt + 0x80' (SYMOPT_IGNORE_CVREC) –

Смежные вопросы