Один из способов сделать это - записать источники недетерминированности в системе (ввод-вывод, прерывания) и делать снимки состояния через различные промежутки времени.Таким образом, вы можете «перематывать» назад, восстанавливая предыдущий снимок и воспроизводя вперед, используя записанный недетерминизм, пока не достигнете желаемой точки в прошлом.
Например, представьте себе эту временную шкалу:
1 2 3 4
| | | |
- Запуск программы
- Снимок состояния, сделанный историческим отладчиком
- Момент времени, к которому пользователь хочет перемотать
- Сейчас
Предположим, что пользователь хочет перемотать назад к пункту 3. Это можно сделать, восстановив состояние системы (например, память, регистры) до точки 2 и разрешив системе работать как обычно, пока не достигнет точки 3. Когда нужны данныес диска, сети или другого недетерминированного источника исторический отладчик может использовать свою записанную информацию для предоставления данных.Пользователю кажется, что состояние программы было просто восстановлено до пункта 3.
Я полагаю, что это упрощенное представление о том, как Replay Debugger VMWare работает (см. Также tech talk ).