Подтвердить что ты не робот

Как настроить символы в 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+                                      *
*********************************************************************

В a !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 для поиска символов?

Отказ от ответственности: предполагается, что это канонический вопрос ко всем неправильным сообщениям в .

4b9b3361

Ответ 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 для получения файлов символов отладки (должен перенаправить здесь, но перенаправление в настоящее время нарушено)

Символьный путь для отладчиков Windows