Как вы идентифицируете (и получаете доступ) модули / символы отладки для использования, когда предоставляются окна .dmp или .minidmp - PullRequest
1 голос
/ 31 декабря 2008

В порядке, следующем за чтением файла windows * .dmp

Получив файл дампа от случайного клиента, запустив сеанс отладки, чтобы увидеть сбой, вы часто обнаруживаете, что он находится в MS или другой сторонней библиотеке. Следующая проблема заключается в том, что вы можете не знать о настройке ПК до такой степени, что вы можете быть уверены, что у вас есть фактически доступные модули.

Например, в настоящее время я застреваю, пытаясь получить символы для загрузки для ntdll.dll (5.01.2600.5512). В MSVC 2005 столбец пути в окне списка модулей показывает * перед полностью измененным именем файла и отказывается загружать символы, которые я скачал для XP / SP1 / SP1a / SP2 / SP3.

У меня есть настройка сервера символов для загрузки из Интернета и сохранения в локальном кэше, который, кажется, хорошо работает для модулей, которые у меня есть на моем ПК. Использование графического интерфейса для метода

Set _NT_SYMBOL_PATH=srv*d:\SymbolCache*\\server1\Third-Party-PDB;srv*d:\SymbolCache*\\server2\Windows\Symbols*http://msdl.microsoft.com/download/symbols

Возможно, у меня неправильные символы, но поскольку новые не загружаются, куда мне перейти дальше? Нужно ли связываться с клиентом и спрашивать, какой SP он установил, и какие-либо другие исправления? Нужно ли устанавливать этот компьютер, а затем запускать отладчик с файлом dmp, чтобы получить нужные мне символы?

Ответы [ 4 ]

3 голосов
/ 31 декабря 2008

Если вы используете WinDbg (входит в пакет Средства отладки для Windows ), то просто заставить его автоматически получать нужные вам символы от Microsoft. Настройте путь символа с помощью команды «.symfix» (или «.symfix +», чтобы просто добавить к существующему пути поиска символа).

Как только вы это сделаете и загрузите аварийный дамп в WinDbg, введите ".reload / f", чтобы WinDbg перезагрузил символы. Он будет использовать информацию в самом файле дампа для извлечения правильных символов с общедоступного сервера символов Microsoft, независимо от того, какие библиотеки DLL установлены на вашем компьютере.

Если по какой-то причине символы не загружаются должным образом после того, как вы это сделали, введите «! Sym noisy» в командное окно WinDbg и снова загрузите символы. Когда WinDbg попытается загрузить их, вы увидите, что он выводит все ошибки, с которыми он сталкивается в процессе поиска / загрузки. Эти сообщения об ошибках помогут вам в дальнейшем диагностировать, что происходит неправильно и почему не загружаются правильные символы.

Этот пост содержит информацию, которая также может быть полезна.

1 голос
/ 06 января 2009

Если вы вводите «Set _NT_SYMBOL_PATH = srv...» в командной строке, необходимо учитывать две вещи:

  • cmd.exe set не игнорирует пробелы, поэтому она определяет переменную с именем "_NT_SYMBOL_PATH", а не "_NT_SYMBOL_PATH".
  • Вы должны запустить отладчик как дочерний элемент этой командной строки. Однако вам не нужно делать это, если вы используете панель управления для установки постоянных переменных среды или если вы используете команду setx (в Windows Vista или в одном из наборов ресурсов Windows).

Если вы устанавливаете путь к символу каким-либо другим способом, это не применяется.

0 голосов
/ 31 декабря 2008

Что вы используете для отладки минидампа? Т.е. WinDBG или Visual Studio? А как был создан минидамп?

В мини-дампе должно быть достаточно информации для правильного разрешения системных символов dll. Вы используете локальную загрузку символов или http://msdl.microsoft.com/?

Обновление: вы должны иметь возможность добавить общедоступное хранилище символов Microsoft в пункты «Сервис-> Параметры-> Отладка-> Символы-> Файл символов (.pdb)», а затем вручную загрузить символы, щелкнув правой кнопкой мыши модуль в окно модулей и загрузка их, если это не сделано автоматически.

Также возможно (вероятно), что VS 2005 не смотрит на _NT_SYMBOL_PATH для разрешения символов минидампа.

0 голосов
/ 31 декабря 2008

Попробуйте следовать инструкциям на этой статье в КБ и убедитесь, что ваш путь к символу настроен правильно, что WinDbg имеет к нему доступ и что символы ntdll (например) фактически загружены в ваш символ кэш. В статье также содержатся инструкции о том, как вручную загружать и проверять символы в кэше с помощью инструмента SymChk.

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