У меня Windows 7 x64 SP1. Я скачал символы из:
http://msdn.microsoft.com/en-us/windows/hardware/gg463028
Я скачал и установил x64 RTM и x64 SP1 для Windows 7 x64 SP1. Устанавливается в папку T:\Symbols
.
Но когда я отлаживаю 64-битное собственное приложение C ++, символы вообще не загружаются. Например, для ntdll.dll
PDB находятся в:
T:\Symbols\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12
T:\Symbols\ntdll.pdb\CFF40300FD804691B73E12CF2A150EE02
Но Visual Studio (2008/2010) не будет загружать символы. Во время отладки в представлении модулей я выбираю ntdll.dll
и говорю Load Symbols From -> Symbol Path
, укажите ntdll.pdb
. Для обоих упомянутых путей всегда будет сказано:
В этой папке не найден соответствующий файл символов.
Я также добавил эту папку (T:\Symbols
) в Debugging -> Options
, но она все равно не будет загружать символы. Во время отладки кнопка Load All Symbols
будет включена, и нажатие не приведет к загрузке символа!
Для 32-разрядных файлов имя файла PDB будет wntdll.pdb
для ntdll.dll
и будет храниться в папках с именами GUID в порядке, упомянутом выше. Но VS также не будет загружать символы для 32-битной отладки.
Довольно интересно (и разочаровывающе), когда я выбираю Load Symbols From -> Microsoft Symbols Server
, он загружает и отлично загружает символы . Он загрузит символы в следующем месте (полный путь для ntdll
):
\Users\...\AppData\Local\Temp\SymbolCache\ntdll.pdb\6192BFDB9F04442995FFCB0BE95172E12
Здесь вы можете видеть, что GUID совпадает с папкой с именем GUID в пути T:\Symbols
, но для установленных вручную символов VS жестко не загружает его!
Для NTDLL.PDB, несмотря на то, что соответствующая папка одинакова, а размер PDB также одинаков, отметка времени может отличаться.
Иногда VS также помещает символы в:
C:\...\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols
Если VS будет загружать правильные символы ТОЛЬКО с сервера Microsoft Symbols, то для чего использовать локально загруженные символы?
Мой вопрос в основном, как загрузить локально загруженные и установленные символы?