Почему WinDbg не может загрузить символы из Windows Server 2003 с загрузкой розничных символов x86 с пакетом обновления 2 (SP2)? - PullRequest
3 голосов
/ 19 января 2012

Я написал проект на языке C ++ под названием «Foo» с использованием Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) в пакете обновления 3 (SP3) для Windows XP Professional 2002. Я встроил проект в Foo.exe.Затем я скопировал файл Foo.exe в Windows Server 2003 Enterprise Edition с пакетом обновления 2. Он работает нормально.

Теперь я пытаюсь отладить его с помощью WinDbg: 6.12.0002.663 X86 Версия 5.2.

Не задан путь к символу, исходный путь или путь к изображению

Когда я открываю C:\foo\Foo.exe из меню «Файл> Открыть исполняемый файл», я вижу эту ошибку:

*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -

Файл Foo.pdb отсутствует в той же папке, где находится файл Foo.exe.Почему я не вижу ошибки для Foo.exe?

При запуске команды ld * в WinDbg я вижу эти ошибки:

0:000> ld *
*** ERROR: Module load completed but symbols could not be loaded for Foo.exe
Symbols loaded for Foo
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\msvcrt.dll - 
Symbols loaded for msvcrt
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll - 
Symbols loaded for kernel32
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCR80.dll - 
Symbols loaded for MSVCR80
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCP80.dll - 
Symbols loaded for MSVCP80
Symbols already loaded for ntdll

Теперь позвольте мне показать две попыткипочини это.Один работал, другой - нет.

Загрузка Windows Server 2003 с пакетом обновления 2 x86 розничных символов не работала

Я перешел на http://msdn.microsoft.com/en-us/windows/hardware/gg463028 и загружено:

Windows Server 2003 с пакетом обновления 2 x86 розничных символов, все языки (размер файла: 154 МБ - большинству клиентов нужен этот пакет.)

Iзапустил его и установил символы в C:\Symbols.В WinDbg я установил путь к символу следующим образом:

C:\Symbols;C:\MySymbols

C:\MySymbols содержит символ для Foo.exe с именем файла: Foo.pdb.

При открытии C:\foo\Foo.exe из меню «Файл> Открыть исполняемый файл» я получил ту же ошибку, что и в предыдущем разделе.

Однако в этот раз команда ld * показала меньше ошибок.

0:000> ld *
Symbols loaded for Foo
Symbols loaded for msvcrt
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll - 
Symbols loaded for kernel32
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCR80.dll - 
Symbols loaded for MSVCR80
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262B86\MSVCP80.dll - 
Symbols loaded for MSVCP80
Symbols already loaded for ntdll

Исправлено с помощью Microsoft Symbol Server

На этот раз я установил путь к символу следующим образом:

SRV*C:\MicrosoftSymbols*http://msdl.microsoft.com/download/symbols;C:\MySymbols

Теперь при открытии C:\foo\Foo.exe из «Файл> Открыть исполняемый файл»меню, я не получил ошибок.Я обнаружил, что C:\microsoftsymbols\ntdll.pdb\F7024C7F15FE4BEA992FF38BE58AC11C2\ntdll.pdb был загружен автоматически.

На этот раз команда ld * также работала без ошибок.

0:000> ld *
Symbols loaded for Foo
Symbols loaded for msvcrt
Symbols loaded for kernel32
Symbols loaded for MSVCR80
Symbols loaded for MSVCP80
Symbols already loaded for ntdll

Следующие дополнительные символы были загружены автоматически во время выполнения команды.

C:\microsoftsymbols\kernel32.pdb\BE496DC9472F4438B080C70594D8F9CC2\kernel32.pdb
C:\microsoftsymbols\msvcp80.i386.pdb\E8A9423E890A4ADDB38F8F756268437C1\msvcp80.i386.pdb
C:\microsoftsymbols\msvcr80.i386.pdb\54C9E2F351544D1CB39517DC4B299EA81\msvcr80.i386.pdb
C:\microsoftsymbols\msvcrt.pdb\A7F38CEE7E684B94B7AA9FFFCAB446851\msvcrt.pdb

Вопросы

  1. Почему я не вижу ошибки, связанной с файлом символов для Foo.exe, когда путь к символу не указан?
  2. Почему загрузка Windows Server 2003 с розничными символами x86 с пакетом обновления 2 и указание пути к нему в качестве пути к символу не работала?

Дополнительная информация

В случае, если это поможет вам ответить на мой вопрос, вот мои данные системы, полученные из winmsd.exe> ​​Сводка системы:

OS Name: Microsoft(R) Windows(R) Server 2003, Enterprise Edition
Version: 5.2.3790 Service Pack 2 Build 3790
Other OS Description : Not Available
OS Manufacturer: Microsoft Corporation
System Name: EULER
System Manufacturer: VMware, Inc.
System Model: VMware Virtual Platform
System Type: X86-based PC
Processor: x86 Family 16 Model 4 Stepping 2 AuthenticAMD ~2417 Mhz
Processor: x86 Family 16 Model 4 Stepping 2 AuthenticAMD ~2416 Mhz
BIOS Version/Date: Phoenix Technologies LTD 6.00, 7/22/2008
SMBIOS Version: 2.4
Windows Directory: C:\WINDOWS
System Directory: C:\WINDOWS\system32
Boot Device: \Device\HarddiskVolume1
Locale: United States
Hardware Abstraction Layer: Version = "5.2.3790.3959 (srv03_sp2_rtm.070216-1710)"
User Name: Not Available
Time Zone: India Standard Time
Total Physical Memory: 3,839.45 MB
Available Physical Memory: 1.56 GB
Total Virtual Memory: 5.60 GB
Available Virtual Memory: 3.33 GB
Page File Space: 2.00 GB
Page File: C:\pagefile.sys

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Почему я не увидел ошибку относительно файла символов для Foo.exe, когда не указан путь к символу?

Ответ на 1:

Вы сделали, когда windbgпопытался загрузить символы для Foo

0:000> ld *
   *** ERROR: Module load completed but symbols could not be loaded for Foo.exe
   Symbols loaded for Foo

Причина, по которой он не появился при первой загрузке, заключалась в том, что windbg не пытался загрузить символы сначала для foo.Скорее всего, потому что Фу еще не позвонили.Программа только запускалась, и ваша логика программы еще не была вызвана.


Зачем скачивать Windows Server 2003 с розничными символами Service Pack 2 x86 и указывать путь к нему в качествепуть к символу не работает?

Ответ на вопрос 2:

Не могу сказать со 100% уверенностью, но, скорее всего, были применены исправления безопасности, чтобы pdbs быливключены в розничные символы не включены изменения.Когда вы зашли на сайт MS, вы можете получить все символы для всех выпущенных версий библиотек DLL, включая исправленные версии.

1 голос
/ 21 января 2012

Почему я не вижу ошибку относительно файла символов для Foo.exe, когда нет был указан путь к символу?

Хотя предыдущий ответ верен, обратите внимание, что файлы изображений по умолчанию содержат ссылку на расположение сборки их PDB. Таким образом, WinDBG может волшебным образом найти PDB для образа, созданного на вашем локальном компьютере. Это объясняется более подробно здесь:

http://analyze -v.com /? Р = 245

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...