2013-08-15 1 views
9

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

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 

Я изменил драйвер2 с 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, но драйвер2/запись по-прежнему существует: оно должно быть в кэше рабочей области по умолчанию или где-нибудь. Как я могу удалить все личные настройки WinDbg, включая эти кеши, поэтому я могу перезапустить WinDbg и уйти с драйвером2/path и заставить его использовать mydriver /.

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

ответ

5
!sym noisy 

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

.reload /i /f yourdriver.sys 

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

+0

/i работает для меня, в моем случае я использую windbg 6.2.8299.0 AMD64 в Windows 7 с пакетом обновления 1 (SP1) для отладки полного файла дампа. Я очень уверен, что .sympath верен, и я использую symchk для проверки корректности .dll и .pdb. Но windbg все еще отказывается загружать pdb. Кстати, от windbg help,/i также подразумевает/f, даже если вы не указали флаг f /. – zhaorufei

0

Является ли драйвер изначально скомпилированным &, встроенным в путь 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 файл там.

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

+0

Привет, да, я могу решить эту проблему.Я также могу решить эту проблему, переименовав каталог mydriver в driver2. Сначала я скомпилировал драйвер в каталоге driver2, затем переименовал каталог в mydriver, удалил все файлы, вычитал mydriver.c и перекомпилировал. Я остановил драйвер, удалил его и перезапустил отладочную систему Windows; Я также перезапустил систему debugee. Я думаю, проблема в том, что WinDbg сохранил этот путь где-то в кеше, и мне интересно, где; представление рабочей области по умолчанию также изменяется после того, как debuggee подключается к Windbg, поэтому рабочее пространство должно быть где-то сохранено, несмотря на то, что я удаляю его. – eleanor

+0

Похоже, что для файла драйвера пути накапливаются. Не уверен, что это реальная ошибка в windbg или ошибка документации. Если вы подозреваете, что это ошибка в Windbg, вы можете попробовать установить последнюю версию windbg, чтобы узнать, исправляет ли она проблему. Кроме того, вы можете попробовать удалить соответствующие рабочие области по умолчанию (user \ kernel \ remote и т. Д.) И сохранить тот, который вы хотите по умолчанию, по умолчанию File-> Save WS as-> Default в соответствующем режиме (user \ kernel \ remote) –

+0

это может быть полезным: http://msdn.microsoft.com/en-us/library/windows/hardware/ff560260(v=vs.85).aspx – zinking

0

Лучший способ решить эту - поворот на сим шумно и смотреть на пути в .reload/ф my_driver.sys или добавить новый путь к .sympath [+] путь/к/PDB и делать то же

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

  • Нет связанных вопросов^_^