Как работает исторический отладчик? - PullRequest
5 голосов
/ 19 мая 2010

Исторический отладчик может вернуть состояние программы (включая текущую инструкцию) в прежнее состояние. Как это возможно в управляемых или неуправляемых средах? Я не могу себе представить, что отладчик снимает состояние всей системы в каждой инструкции.

Ответы [ 3 ]

4 голосов
/ 19 мая 2010

Один из способов сделать это - записать источники недетерминированности в системе (ввод-вывод, прерывания) и делать снимки состояния через различные промежутки времени.Таким образом, вы можете «перематывать» назад, восстанавливая предыдущий снимок и воспроизводя вперед, используя записанный недетерминизм, пока не достигнете желаемой точки в прошлом.

Например, представьте себе эту временную шкалу:

1    2           3     4
|    |           |     |
  1. Запуск программы
  2. Снимок состояния, сделанный историческим отладчиком
  3. Момент времени, к которому пользователь хочет перемотать
  4. Сейчас

Предположим, что пользователь хочет перемотать назад к пункту 3. Это можно сделать, восстановив состояние системы (например, память, регистры) до точки 2 и разрешив системе работать как обычно, пока не достигнет точки 3. Когда нужны данныес диска, сети или другого недетерминированного источника исторический отладчик может использовать свою записанную информацию для предоставления данных.Пользователю кажется, что состояние программы было просто восстановлено до пункта 3.

Я полагаю, что это упрощенное представление о том, как Replay Debugger VMWare работает (см. Также tech talk ).

2 голосов
/ 19 мая 2010

Ну, самое главное, они не делают снимок в каждой инструкции только в различных «точках интереса» (например, когда выдается исключение, когда вызываются определенные методы и т.д.). Например, снимки Microsoft IntelliTrace (в VS2010) при доступе к файловой системе и реестру, взаимодействиям с пользовательским интерфейсом WinForms и т. Д.

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

Я не знаю о других исторических отладчиках, но в любом случае IntelliTrace работает в VS2010.

0 голосов
/ 19 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...