Ответ 1
Символы могут быть настроены правильно различными способами.
ПРЕДУПРЕЖДЕНИЕ. В примерах здесь используется \\server\symbols
, который обычно является сетевым хранилищем, которое недоступно. Адаптируйте его на локальный сервер или полностью отпустите эту часть, если у вас ее нет. Несуществующий сервер может вызвать задержки и т.д.
Версия TL;DR для 80% случаев
Создайте новую папку c:\symbols
для символов, предоставленных Microsoft. Затем введите
.symfix+ c:\symbols
.reload
(или reload -f
при необходимости)
Убедитесь, что у вас есть подключение к Интернету, так как это свяжется с некоторыми серверами Microsoft и загрузит символы оттуда.
В 80 +% случаев это может решить проблему с вашими символами. Если нет, читайте дальше.
Фиксация символов командами
WinDbg будет искать символы в порядке их появления в пути символа. Поэтому рекомендуется сначала разместить ваши локальные символы, затем поделиться с ними локальной сетью, а затем загрузить символы из Интернета и локально сохранить копию.
.sympath c:\mysymbols ; *** Symbols of your application, locally, flat list of PDB files
.sympath+ cache*c:\symbolcache ; *** (optional) Create a cache for everything
.sympath+ \\server\symbols ; *** Symbols provided from a network share
.symfix+ c:\symbols ; *** Microsoft symbols
Фиксация символов меню
В WinDbg (но не в эквивалентах командной строки) вы можете установить путь символа на File/Symbol File Path...
или нажав Ctrl + S. Вы вводите его в следующем формате
c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
Фиксирование символов по командной строке
WinDbg также принимает переключатель командной строки -y
, если вы предпочитаете иметь разные ссылки на рабочий стол с различными настройками пути символов.
WinDbg -y "<symbol path>"
Обратите внимание, что здесь нужен полный путь, который находится в форме, например
c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
Фиксация символов переменной окружения
Существует переменная среды, называемая _NT_SYMBOL_PATH
, которая также может быть установлена на путь символа. Используйте следующий синтаксис:
c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
Обратите внимание, что не только WinDbg оценивает эту переменную, но также Visual Studio, Process Explorer, Process Monitor и потенциально другое программное обеспечение. Вы можете столкнуться с воздействием производительности на эту переменную среды.
Сохранение пути символа как части рабочей области
Если у вас довольно сложная настройка символа, которая включает несколько путей, ознакомьтесь с концепцией рабочих областей WinDbg.
Рабочие пространства позволяют сохранить путь к символу, поэтому вам не нужно повторно вводить все команды в каждый сеанс отладки.
Как только вы удовлетворены рабочей областью, создайте ссылку для WinDbg, чтобы включить -Q
, что означает "Подавить раздражающее" рабочее пространство "Сохранить"? ".
До сих пор я очень рад, что сохранил символы как часть рабочего пространства Base
.
Отложенные символы
Отложенные символы (обозначенные как таковые во время команды lm
) не являются проблемой. WinDbg будет загружать их при необходимости. Чтобы принудительно загрузить все из них, введите
ld*
Отладка проблем с символами
Если символы (PDB) не работают должным образом, используйте
!sym noisy
чтобы получить дополнительную информацию о том, что именно делает WinDbg при разрешении символов.
Когда вы нашли решение, отключите его с помощью
!sym quiet
Чтобы проверить правильность отдельных символов, вы можете использовать инструмент symchk
, который поставляется с WinDbg.
Symchk /if <exe> /s <symbol path> /av /od /pf
/if = input is a file
/s = symbol file path
/od = all details
/av = verify
/pf = check if private symbols are available
или получить ChkMatch, что немного проще в использовании
ChkMatch -c <exe file> <pdb file>
Если у вас возникли проблемы с доступом к символам из общего сетевого ресурса, убедитесь, что вы вошли в сетевой ресурс раньше. AFAIR, WinDbg не запрашивает учетные данные.
Официальная документация
Используйте Microsoft Symbol Server для получения файлов символов отладки (должен перенаправить здесь, но перенаправление в настоящее время нарушено)