Я написал проект на языке 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
Вопросы
- Почему я не вижу ошибки, связанной с файлом символов для Foo.exe, когда путь к символу не указан?
- Почему загрузка 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