Windbg и файлы символов

У меня проблема с файлами символов. Я поэкспериментировал с путем к файлу символов и установил путь следующим образом:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\driver2\objchk_win7_x86\i386

Но потом я изменил его на следующее:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386

Я изменил driver2 с mydriver в пути: это путь, по которому находится файл .pdb для моего драйвера. Проблема в том, что .sympath печатает правильный путь, как показано ниже:

kd> .sympath
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386

Но символы для драйвера до сих пор не найдены. Если я запускаю команду .reload, мы видим, что WinDbg ищет .pdb в каталоге driver2/, а не в каталоге mydriver/.

kd> .reload /f mydriver.sys
SYMSRV:  c:\symbols\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mydriver.pdb/3D655E533B0449A38D7AB0AF637CE9201/mydriver.pdb not found
SYMSRV:  c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb not found
DBGHELP: c:\users\myuser\desktop\driver2\objchk_win7_x86\i386\mydriver.pdb - file not found
*** ERROR: Module load completed but symbols could not be loaded for mydriver.sys
DBGHELP: mydriver - no symbols loaded

Я удалил все рабочие области, закрыл WinDbg, перезапустил Windows, но запись driver2/ все еще существует: она должна быть в кеше рабочей области по умолчанию или где-то еще. Как я могу удалить все личные настройки WinDbg, включая эти кеши, чтобы я мог перезапустить WinDbg и уйти с путем driver2/ и заставить его использовать mydriver/.

Я также мог бы решить проблему с переименованием каталога mydriver/ обратно в driver2/, но я не хочу решать проблему таким образом. Я хочу понять, что происходит, и решить это как можно лучше.


person eleanor    schedule 15.08.2013    source источник


Ответы (3)


!sym noisy

подскажет почему не хочет грузить pdb. Возможно, вы перестроили свой драйвер, и pdb guid или pdb age больше не совпадают. Если вы уверены, что создали те же исходные файлы, вы можете принудительно загрузить свой pdb с помощью

.reload /i /f yourdriver.sys

/i — это волшебный переключатель для загрузки также несоответствующих баз данных. Этот переключатель не будет загружать драйвер с вашего сервера символов, но будет учитывать только пути к локальным файлам для загрузки вашего драйвера. Кроме того, каталоги хранения символов (SRV*) не учитываются, поскольку существует множество версий на выбор. Но если ваш .sympath напрямую указывает на ваш pdb, он будет загружен.

person Alois Kraus    schedule 27.05.2015
comment
У меня работает /i, в моем случае я использую версию Windbg 6.2.8299.0 AMD64 в Windows 7 с пакетом обновления 1 (SP1) для отладки файла полного дампа. Я абсолютно уверен, что .sympath правильный, и я использую symchk, чтобы убедиться, что .dll и .pdb идеально совпадают. Но Windbg по-прежнему отказывается загружать pdb. Кстати, из справки Windbg /i также подразумевает /f, даже если вы не указали флаг /f. - person zhaorufei; 21.07.2016

Драйвер изначально скомпилирован и встроен в путь driver2? Где находится mydriver.sys?

For example assume I have symbol path 'c:\users\rahulsundar\desktop' set and try to load ntdll.dll, then it displays below error,

0:000> .reload ntdll.dll
DBGHELP: c:\users\rahulsundar\desktop\ntdll.pdb - file not found
DBGHELP: c:\users\rahulsundar\desktop\dll\ntdll.pdb - file not found
DBGHELP: c:\users\rahulsundar\desktop\symbols\dll\ntdll.pdb - file not found
DBGHELP: C:\Windows\SYSTEM32\ntdll.pdb - file not found
DBGHELP: ntdll.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols

Note: Windbg by default searches ntdll.pdb from the same location 'C:\Windows\SYSTEM32'

Один из способов решения текущей проблемы: из журнала видно, что Windbg ожидает файл pdb в каталоге «c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb».

Поэтому вручную создайте каталог до «mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201» и поместите туда файл pdb.

Это просто стандартный способ (binaryfoldername\hashid\pdbfile), которым Windows ожидает символ для двоичного файла.

person Rahul Sundar    schedule 16.08.2013
comment
Привет, да, я могу решить проблему так. Я также могу решить эту проблему, переименовав каталог mydriver в driver2. Сначала я скомпилировал драйвер в каталоге driver2, затем переименовал каталог в mydriver, удалил все файлы, кроме mydriver.c, и перекомпилировал. Я остановил драйвер, удалил его и перезапустил отлаженную систему Windows; Я также перезапустил отладочную систему. Я думаю, проблема в том, что WinDbg сохранил этот путь где-то в кеше, и мне интересно, где; вид рабочей области по умолчанию также изменяется после подключения отлаживаемой программы к Windbg, поэтому рабочую область необходимо где-то сохранить, несмотря на то, что я ее удалил. - person eleanor; 17.08.2013
comment
Похоже, что для файла драйвера пути суммируются. Не уверен, что это настоящая ошибка в windbg или ошибка в документации. Если вы подозреваете, что это ошибка в Windbg, вы можете попробовать установить последнюю версию Windbg, чтобы посмотреть, устраняет ли она проблему. Также вы можете попробовать удалить соответствующие рабочие пространства по умолчанию (пользователь\ядро\удаленный и т. д.) и сохранить нужное по умолчанию, выбрав Файл->Сохранить WS как->По умолчанию в соответствующем режиме (пользователь\ядро\удаленный). - person Rahul Sundar; 19.08.2013
comment
это может быть полезно: msdn. microsoft.com/en-us/library/windows/hardware/ - person zinking; 07.12.2013

Лучший способ решить эту проблему - включить sim noisy и посмотреть путь в .reload /f my_driver.sys или добавить новый путь в .sympath[+] path/to/pdb и сделать то же самое.

person Olga Krishtal    schedule 16.03.2015