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