Как использовать WinDbg для анализа аварийного дампа для приложения VC ++? - PullRequest
42 голосов
/ 09 апреля 2009

Как использовать WinDbg для анализа файла дампа?

Ответы [ 4 ]

69 голосов
/ 17 апреля 2009

Вот несколько общих шагов, которые помогут вам на вашем пути:

Во-первых, вы должны изменить настройки вашего компилятора, чтобы он создавал файлы PDB даже для выпусков сборки. Более поздние версии компилятора Visual C ++ делают это по умолчанию, но во многих версиях Visual C ++ вы должны делать это самостоятельно. Создайте файлы базы данных программы, а затем сохраните архив этих файлов вместе с каждой сборкой приложения. Очень важно, чтобы каждая сборка ваших приложений имела свой собственный набор PDB. Вы не можете просто использовать те же самые, которые вы сделали со сборкой 10, например, для проверки дампов, созданных сборкой 15. За время существования вашего проекта вы получите тонну PDB, так что будьте к этому готовы.

Далее вам необходимо определить точную версию вашего приложения, сгенерировавшего файл дампа. Если вы создаете собственные MiniDump (например, вызывая MiniDumpWriteDump () ), возможно, самый простой способ сделать это - просто сделать часть имени файла MiniDump полным номером версии вашего приложения. Вам нужно будет иметь разумную схему нумерации версий, чтобы это работало. В моем магазине число сборок во всех ветвях увеличивается на единицу каждый раз, когда сборщик автоматически создает сборку.

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

Теперь вам нужно просмотреть историю вашего контроля версий и найти исходный код для этой точной версии программного обеспечения. Лучший способ сделать это - применять метки к вашим веткам каждый раз, когда вы делаете сборку. Установите значение метки на точный номер версии, и его легко найти в истории.

Вы почти готовы запустить WinDbg / Visual C ++:

  1. Получите полное дерево исходников для этой версии вашего приложения. Поместите его в отдельное место на жестком диске, скажем c:\app_build_1.0.100 для версии приложения 1.0 build # 100.
  2. Получите двоичные файлы для этой конкретной версии вашего приложения и поместите их где-нибудь на жесткий диск. Возможно, проще всего установить эту версию вашего приложения, чтобы получить двоичные файлы.
  3. Поместите файлы PDB в то же место, что и двоичные файлы на шаге 2.

Теперь у вас есть два варианта просмотра файла дампа. Вы можете использовать Visual Studio или WinDbg. Использовать Visual Studio проще, но WinDbg гораздо мощнее. В большинстве случаев функциональности в Visual Studio будет достаточно.

Чтобы использовать Visual Studio, все, что вам нужно сделать, это открыть файл дампа, как будто это проект. После открытия «запустите» файл дампа ( F5 по умолчанию) и, если все пути заданы правильно, вы попадете прямо к коду, который вылетел, даст вам стек вызовов и т. Д.

Чтобы использовать WinDbg, вам нужно прыгнуть через пару обручей:

  1. Запустить WinDbg
  2. Откройте файл дампа. ( Ctrl + D по умолчанию)
  3. Скажите WinDbg, чтобы он получил правильные файлы символов MicroSoft. Тип .symfix. Это может занять несколько минут, так как из Интернета выйдет куча вещей.
  4. Сообщите WinDbg, где находятся символы (файлы PDB). Введите .sympath+ c:\pdblocation, подставляя вместо пути куда-нибудь файлы PDB. Убедитесь, что вы получили знак «плюс» без пробелов между .sympath и +, иначе вы испортите шаг 3.
  5. Сообщите WinDbg, где находится исходный код. Введите .srcpath c:\app_build_1.0.100, подставив путь, по которому вы получили код из системы контроля версий для этой версии программного обеспечения.
  6. Скажите WinDbg проанализировать файл дампа. Тип !analyze -v

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

Удачи!

33 голосов
/ 10 августа 2014

(см. Разделы «Дамп» ниже)

Основные учебные пособия и демонстрации использования WinDbg

Различные способы «запуска» / присоединения WinDBG

1039 * Рабочие пространства * Понимание того, как работают рабочие области ... Разверните ваш отладчик: создание настраиваемого рабочего пространства для отладки windbg Раскрытие того, как рабочие пространства работают в WinDbg Cmdtree

«cmdtree» позволяет вам определять «меню» команд отладчика для быстрого доступа к часто используемым командам без необходимости запоминать краткие названия команд.

Вам не нужно помещать все определения команд в один и тот же текстовый файл cmdtree .... вы можете хранить их отдельно и загружать несколько, если хотите (они затем получают свое собственное окно).

Скрипт запуска

Вы можете использовать параметр -c в командной строке для автоматического запуска сценария WinDBG при запуске WinDBG.

Дает возможность включить режим DML (язык разметки отладчика), загрузить определенные расширения, установить точки останова исключений .NET, установить флаги ядра (например, при отладке ядра вам может потребоваться изменить маску DbgPrint, чтобы вы могли видеть информацию трассировки ... .ed nt! Kd_DEFAULT_Mask 0xffffffff), загрузка cmdtrees и т. д.

Пример сценария:

$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D

Командные шпаргалки

Расширения

«Расширения» позволяют расширять диапазон команд / функций, поддерживаемых в WinDBG.

  • bigLasagne (bldbgexts & blwdbgue)
    - подсветка синтаксиса сборки и инструмент отображения драйвера)

  • Считыватель чисел BigLib

  • Бьякуган
    - обнаружение методов антиотладки, визуализация / эмуляция кучи Vista, отслеживание буферов в памяти

  • Анализатор потока вызовов + KnExt

  • CmdHist
    - записывает каждую команду, которую вы выполнили в сеансе отладки, чтобы вы могли легко выполнить ее повторно

  • Core Analyzer
    - проверить структуры кучи на наличие повреждений, обнаружить объекты, совместно используемые потоками и т. Д.

  • dom Расширение WinDBG
    - (! Stlpvector,! Idt,! Unhex,! Grep и т. Д.)

  • dumppe
    - выдает PE-файл из памяти

  • Расширение средства просмотра изображений (Владимир Вукичевич)

  • Инструмент отладчика Intel UEFI Development Kit
    - отладка прошивки UEFI

  • утечка
    - трекер с ручкой GDI / USER для обнаружения утечек

  • Мона (требуется PyKD)
    - набор команд для расширенного анализа / поиска эксплойтов

  • MSEC
    - обеспечивает автоматический анализ сбоев и оценку рисков безопасности

  • narly
    - выводит информацию о загруженных модулях, например, при использовании SafeSEH, ASLR, DEP, / GS (проверки безопасности буфера)

  • netext (Родни Виана)
    - (! Wservice - список сервисных объектов WCF,! Wconfig - показывать строки .config,! Whttp - список HttpContexts,! Wselect /! Wfrom - поддерживать SQL как запросы к массивам)

  • ODbgExt
    - открыть расширения отладчика

  • OllyMigrate
    - передать отладчик другому отладчику без перезапуска

  • Psscor2
    - расширенный набор SOS для помощи в отладке управляемого кода .NET 2.0

  • Psscor4
    - расширенный набор SOS для помощи в отладке управляемого кода .NET 4

  • PyDBGExt
    - позволяет использовать сценарии Python

  • PyKD
    - позволяет использовать Python для сценария WinDBG

  • sdbgext (Найнив)
    - (! Valloc,! Vallocrwx,! Heapalloc,! Heapfree,! Remotecall,! Remotecall64,! Loaddll,! Unloaddll,! Close,! Killthread,! Adjpriv ,! ret)

  • SieExtPub
    - расширение Legacy ... теперь встроено в WinDBG в ext.dll

  • SOSEX
    - дополнительные команды для отладки управляемого кода NET 2.0 или 4.0

  • SPT / SDBGExt2 (Стив Нимитц)
    - (! DumpHttpContext,! DumpASPNetRequests,! DumpSqlConnectionPools,! DumpThreadPool и т.д.)

  • Uniqstack
    - источник для расширения отладчика (для доступа к нему требуется учетная запись OSR Online)

  • viscope
    - график покрытия кода

  • Wait Chain Traversal / wct.dll (расширения отладки Codeplex
    - отображать цепочки ожидания потоков приложений (помогает найти взаимоблокировки )

  • windbgshark
    - включает анализатор протокола Wireshark для управления и анализа трафика ВМ

  • Расширения WinDBG (Саша Гольдштейн)
    - Tracer, WCT, heap_stat, bkb, traverse_map, traverse_vector)

  • Подсветка WinDBG (ColorWindbg.dll) [Используйте Google Translate для перевода ссылки]
    - подсветка синтаксиса asm

написать собственное расширение

Использование WinDBG для отладки управляемого кода

Сценарии (C #, PS, Python, WinDBG)

Отладчики / Инструменты, использующие API dbgeng.dll / Инструменты WinDBG

Различные способы создания файлов аварийных дампов для анализа после смерти

Инструменты анализа дампа

  • BlueScreenView - находит мини-дамп файлы .dmp, сохраненные Windows после BSOD, и извлекает информацию о том, что вызвало сбой
  • Debug.Analyzer (может анализировать файлы дампа, а плагины могут быть написаны в .NET)
  • SAD - Simple After Dump (посмертный анализатор)
  • Volatility - платформа для анализа "памяти", записанной в файлах дампа ( шпаргалка )

Инструменты, связанные с дампом

  • Citrix dumpcheck - проверяет согласованность файла дампа (похоже, он был заброшен ссылка + ссылка )
  • dumpchk (часть средств отладки) - проверяет согласованность файла дампа
  • MoonSols Windows Memory Toolkit (ранее windd ) - преобразует различные необработанные файлы дампа памяти в WinDBG-совместимые dmp-файлы
  • vm2dmp - Конвертер состояния виртуальной машины Microsoft Hyper-V в дамп памяти
  • vmss2core - преобразует файл снимка VMWare в файл дампа ядра ( загрузка ), ( инструкции )

Виртуальные машины отладки ядра

  • VMKD - Расширения KD для виртуальной машины
  • VirtualKD - (поддержка отладчика ядра для ОС, размещенных в VMWare / VirtualBox)

Видео

Блоги

Некоторые блоги (смесь отладки нативного и управляемого кода).

Расширенные статьи и учебные ресурсы

Альтернативные отладчики

Другие ссылки

  • Совместная библиотека инструментов RCE
    - огромная коллекция инструментов отладчика и системного уровня
  • cr4zyserb
    - огромная коллекция плагинов и других инструментов отладки
  • Как написать справку по отладчику Windows (Devon Straw)
    - большой набор ссылок, дающих вам подробную информацию, которая понадобится вам, если вы захотите написать собственный отладчик, например Формат файла PDB, форматы файла .DMP, структура PE-файла, как записывать трассировки стека и т. Д. И т. Д.
  • Tuts4You
    - распаковщики, IDA, OllyDBG, плагины Immunity Debugger и т. Д.
5 голосов
/ 09 апреля 2009

Это действительно широкий вопрос.

  1. Первым шагом является загрузка файла дампа в экземпляр WinDbg.
  2. Далее вам необходимо убедиться, что у вас настроены символы.
  3. Наконец, вы можете запустить команду !analyze -v, чтобы выполнить базовый анализ. Вам необходимо иметь символьную информацию для вашего кода, чтобы сделать файлы дампа полезными.

Веб-сайт Портал анализа дампов памяти, отслеживания программного обеспечения, отладки, вредоносных программ, вредоносных программ и аналитики был очень информативным для меня. Мне также очень понравилась книга Марио Хьюардта и Даниэля Правата Расширенная отладка Windows .

3 голосов
/ 11 апреля 2009

У Тесс Феррандез отличный набор базовых учебных пособий и лабораторных работ , чтобы начать работу с Windbg. Я настоятельно рекомендую их.

...