Получение списка сторонних модулей с помощью Windbg?

Я использую windbg для проверки некоторых аварийных дампов, отправленных приложением. Кажется, существует некоторая корреляция между сбоем, который я вижу, и загрузкой в ​​процесс определенной сторонней DLL (я подозреваю, что это ненадежный Winsock LSP). Чтобы упростить такой анализ в будущем, есть ли сценарий windbg, который просто покажет мне список модулей, не принадлежащих Microsoft? Это сделало бы закономерности между авариями более очевидными для меня. Я использую "lm D sm", но просматривать список вручную сейчас очень сложно.

Спасибо!


person twk    schedule 14.12.2008    source источник


Ответы (5)


Попробуйте использовать "lm e" с указанием пути к символу на сервер символов Microsoft (и с загруженными только символами MS). Это заставит WinDbg показать список всех модулей с любым символом «проблемы», включая модули, которые не были загружены.

Ключи к выполнению этой работы:

  1. Сочувствие настроено только на использование хранилища символов MS (для этого используйте «.symfix»).
  2. Символы были загружены с использованием вышеуказанного сочувствия

Оттуда вы можете добавить другие параметры для «lm», чтобы получить информацию, такую ​​​​как полный путь и т. Д.

person Brian    schedule 22.12.2008

Вы можете использовать cdb для сценария отладчика, и он просто выводит на стандартный вывод — откройте аварийный дамп, распечатайте список загруженных модулей, затем выйдите, затем вы можете использовать свой любимый инструмент для работы с текстом (подсказка: его имя — Perl;)) для поиска в списке.

РЕДАКТИРОВАТЬ: просто чтобы добавить дополнительную информацию, cdb - это версия WinDbg для командной строки; они оба используют один и тот же движок, это просто другой интерфейс.

person Ana Betts    schedule 14.12.2008

Я не уверен, что понимаю, почему вы хотите это сделать, но вы можете вывести из WinDbg в журнал и соотнести со списком DLL. Это довольно легко сделать на любом языке сценариев, таком как Perl, Python и т. д.

person Brian Rasmussen    schedule 14.12.2008

Теперь я делаю это так: запускаю sos.dll из каталога CLR10 из установки Debugging Tools for Windows.

.load clr10\sos
!sam c:\temp\modules

Я открываю каталог c:\temp\modules в проводнике Windows. Я щелкаю правой кнопкой мыши в столбце «Заголовок» и добавляю столбец «Компания». Затем я сортирую по компании и перемещаю библиотеки DLL с компанией «Microsoft Corporation» в отдельный подкаталог под названием «Microsoft».

Независимо от того, какие библиотеки DLL остаются в каталоге, обычно это код сторонних производителей или специально разработанный код.

Спасибо, Аарон

person AaronBa    schedule 21.02.2009

Некоторое время назад я написал небольшое приложение командной строки, чтобы решить именно эту проблему.

http://www.sleep1000.com/software/dumpmod

person Sam    schedule 26.07.2009