Контрольные точки
Лиза П. Хакер хочет добавить в имитатор контрольные точки (breakpoints) для облегчения отладки проектов машин. Вас наняли для реализации такой возможности. Лиза хочет, чтобы в последовательности команд контроллера можно было указать место, где имитатор остановится и позволит ей исследовать состояние машины. Вам нужно реализовать процедуру
(set-breakpoint <machine> <label> <n>)
которая устанавливает контрольную точку перед
n
-й командой, следующей за указанной меткой. Например,
(set-breakpoint gcd-machine 'test-b 4)
установит контрольную точку в
gcd-machine
непосредственно перед присваиванием регистру
a
. Когда моделирование достигает контрольной точки, имитатор должен распечатать метку и смещение точки, а затем прекратить выполнение команд. Тогда Лиза может с помощью
get-register-contents
и
set-register-contents!
исследовать и изменять состояние имитируемой машины. Затем она должна быть способна продолжить выполнение, сказав
(proceed-machine <machine>)
Кроме того, необходимо иметь возможность удалить контрольную точку с помощью
(cancel-breakpoint <machine> <label> <n>)
и удалить все контрольные точки с помощью
(cancel-all-breakpoints <machine>)
Комментарии отсутствуют.