Как вы идентифицируете (и получаете доступ к) модулям / отладочным символам для использования при предоставлении windows .dmp или .minidmp

StackOverflow https://stackoverflow.com/questions/402314

Вопрос

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

Это было полезно?

Решение

Что вы используете для отладки мини-дампа?Т.е. WinDbg или Visual Studio?И как был сгенерирован мини-дамп?

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

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

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

Другие советы

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

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

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

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

Если вы печатаете "Set _NT_SYMBOL_PATH = srv..."в командной строке следует учитывать две вещи:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top