Я написал проект C++ под названием «Foo» с помощью Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) в Windows XP Professional Version 2002 с пакетом обновления 3. Я построил проект в Foo.exe. Затем я скопировал файл Foo.exe в пакет обновления 2 (SP2) для Windows Server 2003 Enterprise Edition. Он работает нормально.Почему WinDbg не может загружать символы из Windows Server 2003 с пакетом обновления 2 x86 розничных символов?
Теперь я пытаюсь его отладить с помощью WinDbg: 6.12.0002.663 X86 Version 5.2.
Нет путь символа, путь источника или путь изображения установлен
Когда я открываю C:\foo\Foo.exe
из 'File> Open выполняемого' меню, я вижу эту ошибку:
*** 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 with Service Pack 2 x86 retail symbols, all languages (Размер файла: 154 MB - Большинство клиентов хотят этот пакет.)
Я запустил его и установил символы в 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
из 'File> Open выполняемым' меню, У меня нет ошибок. Я обнаружил, что 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
Вопросы
- Почему я не вижу ошибку относительно символьного файла для foo.exe, когда не был указан путь символа?
- Зачем загружать Windows Server 2003 с пакетом обновления 2 x86 в розничные символы и указывать путь к нему, поскольку путь к символу не работает?
Дополнительная информация
В случае это поможет вам ответить на мой вопрос, вот мои детали системы, полученной из 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