Friday, September 17, 2010

VMware replay debugging

Или отладка /чужих/ программ без исходников в записи.

Будет рассмотрена отладка с использованием отладчика MS Visual Studio.

Подготовка к записи:
  1. Опции ВМ -> Replay:
    [v] Enable Visual Studio Debugger
  2. Опции гостевой ОС:
    Запустить gflags.exe, выставить опцию
    [v] Disable paging of kernel stacks
    (возможно этот пункт необязателен, не проверял).
  3. Во время записи USB устройства будут отключены от ВМ.
    Однако можно использовать "USB over ethernet" или другую похожую технологию.
Запись:
  1. Сначала надо включить запись, потом запускать программу.
    Иначе ничего не заработает.
  2. После того как программа запустилась - надо сделать снапшот.
    Потом с помощью этого снапшота будем выбирать нужный процесс.
  3. После записи необходимых действий с программой, ее надо закрыть, и только после ее закрытия остановить запись.
    Иначе ничего не заработает.
 Подготовка к отладке:
  1. Необходимо чтобы на физической ОС были все исполняемые модули которые программа использовала во время своей работы.
    При запуске отладки отладчик попросит пути к ним.
    (Хотя там есть кнопка [Ignore])
Запуск отладки:
  1. Открываете в студии любой проект, в MSVS в меню VMware станет активен пункт "Attach to process in recording...". Нажимаете на него.
  2. Указываете путь к ВМ, выбираете запись и снапшот в котором программ уже запущена. Нажимаете [Get Processes], ждете пока запустится ВМ и выбираете нужный процесс. Затем нажимаете [Attach].
  3. Далее появится много окошек сообщений, отладчик предложит скомпилировать проект - нажимайте [Нет], отладчик попросит путь к .exe файлу и скажет что файлы возможно не совпадают, затем отладчик начнет просить локальные пути к модулям загруженным программой.
  4. После того как все пути указаны, а символы загружены, запустится проигрывание записи.
    Надо сразу же нажать на паузу в отладчике.
    (Возможно где-то есть опция чтобы отладчик сам делал паузу в начале.)
  5. Если паузу не нажимать, то запись будет проигрываться до момента завершения процесса. Отладчик выдаст сообщение что запись закончилась. Нажимайте [Break]. Теперь в MSVS в меню VMware надо либо нажать на [Reverse Continue...] и после очень многих перезапусков (до десятков минут) ВМ программа дойдет до момента своего запуска, и опять вывалится в отладчик. Вместо [Reverse Continue...] можно найти нужное место в дизасме и нажать [Reverse Run to Cursor].
<продолжение следует>

No comments:

Post a Comment