Как настроить символы в WinDbg?
Я использую средства отладки для Windows и получаю следующее сообщение об ошибке при запуске WinDbg / cdb или ntsd:
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
При выполнении произвольных команд я также получаю сообщение об ошибке
*** ERROR: Module load completed but symbols could not be loaded for <module>.<ext>
И, кажется, связано следующее:
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
В !analyze -v
Я также видел
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
а также
*************************************************************************
*** ***
*** Either you specified an unqualified symbol, or your debugger ***
*** doesn't have full symbol information. Unqualified symbol ***
*** resolution is turned off by default. Please either specify a ***
*** fully qualified symbol module!symbolname, or enable resolution ***
*** of unqualified symbols by typing ".symopt- 100". Note that ***
*** enabling unqualified symbol resolution with network symbol ***
*** server shares in the symbol path may cause the debugger to ***
*** appear to hang for long periods of time when an incorrect ***
*** symbol name is typed or the network symbol server is down. ***
*** ***
*** For some commands to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*************************************************************************
Как настроить WinDbg для поиска символов?
Отказ от ответственности: это должно быть каноническим вопросом ко всем неправильным сообщениям символов в windbg.
1 ответ
Символы могут быть установлены правильно различными способами.
ВНИМАНИЕ: примеры здесь используют \\server\symbols
обычно это сетевое хранилище, которое недоступно. Адаптируйте его к своему локальному серверу или оставьте эту часть полностью, если у вас ее нет. Несуществующий сервер может вызвать задержки и т. Д.
Версия TLDR для 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 для получения файлов символов отладки (следует перенаправить здесь, но перенаправление в настоящее время нарушено)
Открыв файл дампа, щелкните Файл, выберите Путь к файлу символов или (Ctrl+S). Это открытое поле показывает путь по умолчанию, установленный средой переменной_NT_SYMBOL_PATH
. В моем случае это показывает:
SRV*C:\symcache*http://msdl.microsoft.com/download/symbols
- Вставьте путь к локальным символам перед и ";" после любой записи.
- Установите флажок "Обновить".
- Щелкните ОК.
- В командной строке запустите:
ld*
- дождитесь загрузки символов.