Символы Отладки Windows-Не Загружаются
у меня есть Windows 7 x64 SP1. Я загрузил символы из:
http://msdn.microsoft.com/en-us/windows/hardware/gg463028
я загрузил и установил символы x64 RTM и x64 SP1 для Windows 7 x64 SP1. Установлен на .
но когда я отлаживаю 64-битное собственное приложение C++, символы не будут загружаться вообще. Для ntdll.dll
, например, PDBs расположены в:
T:Symbolsntdll.pdb92BFDB9F04442995FFCB0BE95172E12
T:Symbolsntdll.pdbCFF40300FD804691B73E12CF2A150EE02
но 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...AppDataLocalTempSymbolCachentdll.pdb92BFDB9F04442995FFCB0BE95172E12
здесь вы можете увидеть, что идентификатор GUID соответствует папке с именем GUID в T:Symbols
путь, но для вручную установленных символов VS жестко не загружать его!
для NTDLL.PDB, несмотря на то, что соответствующая папка одинакова и размер PDB также одинаков, временная метка может отличаться.
иногда VS также будет размещать символы в:
C:...AppDataLocalTempSymbolCacheMicrosoftPublicSymbols
если VS будет загружать правильные символы только с сервера символов Microsoft, то как использовать локально загруженные символы?
мой вопрос в основном, как загрузить локально загруженные и установленные символы?
1 ответов
ссылки для загрузки символов RTM или SP1 в значительной степени бесполезны. После каждого дня патча вы получите измененный ntdll.dll или другие центральные библиотеки ОС. Это сделает ваши" старые " pdbs бесполезными. Поэтому вам необходимо загрузить их с серверов символов, чтобы быть уверенным, что вы в курсе.
но так как не все библиотеки DLL изменены, вы должны установить кэш загрузки сервера символов в том же месте, где вы распаковали загруженные символы.
Go кому:
Инструменты-Параметры-Отладка-Символы
и задайте путь для символов кэша в этом каталоге.
загрузить все символы означает, что вы загружаете все символы для всех модулей, загруженных в текущем процессе. Но он не будет загружать все символы для всех DLL, которые используются Windows. Если вы загрузите Windbg, вы получите инструмент под названием symchk.exe, который позволяет загружать символы для всех двоичных файлов рекурсивно.