Показаны сообщения с ярлыком WinDbg. Показать все сообщения
Показаны сообщения с ярлыком WinDbg. Показать все сообщения

понедельник, 19 марта 2012 г.

VMware: ultra quick memory dump

Проблема

Необходимо создать дамп памяти (для отладки) виртуальной машины в определённый момент времени.
Но, например, в виртуальной машине не настроен отладчик ядра или же отладка происходит через виртуальный COM порт (создание полного дампа может занять немало времени).

Решение
  1. Создать снимок виртуальной машины.
  2. Найти имя файла снимка в рабочей директории ВМ.
  3. Используя утилиту vmss2core.exe, конвертировать снимок в формат WinDbg crash dump (конвертация происходит очень быстро). Например:
    "%ProgramFiles(x86)%\VMware\VMware Workstation\vmss2core.exe" –W "WinXp-Snapshot2.vmsn" "WinXp-Snapshot2.vmem"
    
  4. Результат конвертации будет в файле memory.dmp

Дополнительная информация

Debugging Virtual Machines with the Checkpoint to Core Tool
vmss2core - Failed to locate memory

вторник, 7 июня 2011 г.

WinDbg: !error extension and locale

Проблема

WinDbg имеет весьма полезное расширение !error которое декодирует код ошибки и отображает соответствующее описание.

Но, порой, вместо описания можно увидеть ошибку <unable to get error code text> если отладка происходит в режиме пользователя:
0:000> !error 0xC000000D 1
Error code: (NTSTATUS) 0xc000000d - <unable to get error code text>
Так же, можно увидеть пустую строку или часть сообщения если запущена отладочная сессия ядра:
0: kd> !error 87
Error code: (Win32) 0x87 (135) -                              JOIN     SUBST          ,                          .
Последний вывод, кстати, наталкивает на мысль о том что проблема с локалью.

четверг, 26 мая 2011 г.

WinError.exe

Кому из разработчиков не доводилось расшифровать коды ошибок WINERROR или NTSTATUS?

Для быстрого получения вменяемого описания, я, как правило, пользовался поиском в заголовочных файлах:
  • %WDKPATH%\inc\api\ntstatus.h для NTSTATUS.
  • %WDKPATH%\inc\api\WINERROR.H для WINERROR.

Но есть более простой и удобный способ - использовать WinError.exe из набора WDK. Утилита отображает название констант(ы) для указанного кода ошибки. Кроме этого, она так-же показывает соответствие между кодом ошибки WINERROR и NTSTATUS.

Пример использования (если передаваемое значение представляет собой NTSTATUS, следует указать ключ -s):
%WDKPATH%\tools\Other\i386\WinError.exe -s 0xC000000D
    87 ERROR_INVALID_PARAMETER <--> c000000d STATUS_INVALID_PARAMETER

Updated 7.06.2011

А так же можно воспользоваться расширением !error из WinDbg (спасибо Volodymyr Pikhur за подсказку).

Схожие публикации

понедельник, 23 мая 2011 г.

Установка pykd (updated)

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

Попав в раздел Downloads, главной страницы проекта, можно немного растеряться. Поэтому, приведу краткое описание возможных вариантов:
  • pykd-0.0.XX-python-2.6.zip - расширение без каких-либо дополнительных файлов. Для работы требуется Microsoft Visual C++ 2005 SP1 Redistributable Package и Python 2.6.
  • pykd_x86_0.0.0.XX_setup.exe - инсталлятор для 32-х битной версии WinDbg.
  • pykd_x64_0.0.0.XX_setup.exe - инсталлятор для 64-х битной версии WinDbg.
  • pykd-0.0.XX-python-2.7-vc90.zip - то же что и первый пункт, но для работы требуется Microsoft Visual C++ 2008 Redistributable Package и Python 2.7.

Расширение из архива устанавливается вручную.

Далее будет рассмотрено как это сделать с помощью инсталлятора.

Перед тем как продолжить, хочу обратить особое внимание на то что разрядность pykd, соответственно, Python, VC++ Runtime и инсталлятора должна соответствовать разрядности WinDbg. Например, Вы ставите 64-х битную версию расширения и у Вас уже стоит Python для x86. Расширение не будет работать если не установить соответствующую версию Python как предложит инсталлятор.

Возможности инсталлятора:
  • Собственно, установка расширения.
  • Установка скриптов и примеров (в директорию Мои документы\pykd).
  • Добавление пути к директории скриптов в PYTHONPATH. Что бы не вводить полный путь к нужному скрипту.
  • Добавление пути к расширению в PYTHONPATH. Для использования pykd из интерпретатора Python.
  • Проверка наличия Python-а и VC++ Runtime. При необходимости автоматическая загрузка и установка.
  • Запоминание директории установки расширения.
Возможности деинсталлятора:
  • Удаление расширения.
  • Опционально, удаление Python и VC++ Runtime.

воскресенье, 10 апреля 2011 г.

Отладка STL контейнера map в WinDbg

Проблема

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

Решение

Решить задачу можно несколькими способами:
  • Зная внутреннюю структуру контейнера вручную найти необходимые смещения структур в памяти;
  • Создать своё расширение отладчика;
  • Воспользоваться возможностями расширения pykd.

суббота, 19 марта 2011 г.

Установка pykd (Python WinDbg extension)

Данный пост посвящён установке pykd. Что такое pykd и как им пользоваться можно узнать на домашней странице проекта а так же из блога разработчиков.

Начиная с версии 0.0.17 был обновлён инсталлятор, актуальное описание процесса установки здесь.

Инсталлятор присутствует для 2-х платформ: x86 и x64. Разрядность pykd и инсталлятора должна соответствовать разрядности WinDbg. В качестве примера будет рассмотрена установка 64-х битной версии pykd.