Поначалу отладчик Squeak может быть немного пугающим.Давайте рассмотрим различные его части.
Стек контекста
Список в верхней части окна отладчика является представлением стека контекста или стек вызовов .Контекст - это состояние активного блока или метода.
Самый верхний контекст в стеке - тот, который выполняется в данный момент.Обычно после возврата из контекста выполнение программы возобновляется в нижеследующем контексте (т. Е. В контексте отправителя).
Панель кода
Код для выделенного методав контекстном стеке отображается в кодовой панели в центре окна отладчика, и текущий оператор в этом методе подсвечивается.
Экземпляр ипеременные контекста
В нижней части окна отладчика есть два списка watch , используемых для отображения переменных.
Список слева содержит все переменные экземплярадля получателя текущего метода.Список справа содержит все временные переменные в текущем контексте.
Когда переменная выбрана в этом списке, ее значение отображается в пространстве справа от списка.
Кнопки отладчика
Вот чтокнопки отладчика предполагают, что отладчик находится в состоянии, показанном на следующем рисунке:
![Squeak debugger screen shot](https://i.stack.imgur.com/EcclQ.png)
Продолжить: Закрыть отладчик и продолжить .
Продолжить выполнение программы в обычном режиме.Здесь выведите "12345" на стенограмме, издайте звуковой сигнал, вернитесь к #someMethod
и т. Д. *
Перезапустите: Сбросьте контекст к егоstart.
Перезапустите выполнение текущего контекста стека, выделив его первое отправленное сообщение (здесь to: 5
).
Into: Шаг в , которое отправляет сообщение
Шаг внутри метода (здесь Interval>>do:
), выделяющий первое отправленное сообщение внутри него.
Over: Шаг более отправка сообщения
Выполнениевыделенное сообщение отправьте (#do:
) и выделите следующее (#beep
).
Через: Шаг в блок
Шаг по коду, например over за исключением того, что отладчики также останавливаются при входе в любой контекст, код которого является частью отображаемого в данный момент метода.Здесь это означает:
- Остановка выполнения внутри блока
[:each | Transcript show: each]
) вместо переворота всего вызова #do:
за один раз. - При возврате из блока отладчикшаг до следующей точки в этом методе вместо перенастройки к месту, где был оценен блок (т.е. внутри
Interval>>do:
).
Некоторые простые конструкции блока, такие как ifTrue: []
и ifFalse: []
не компилируется при отправке фактического сообщения, и отладчик всегда входит в такие блоки независимо от того, используется ли Over или Through .
Полный стек: Показать полныйstack
Показать больше кадров на панели стека.
Run to Here: Run to Selection
Например, если вы выделите текст "beep" в этом методе программа возобновит работу и остановится непосредственно перед отправкой сообщения #beep
.
Где: Выберите текущий диапазон ПК
Если курсор был перемещен, повторно выделите следующее сообщениеотправить в кодовой панели (здесь do: [:each |Transcript show: each]
).
Другие функции
Отладчик Squeak также позволяет:
- легко создать отсутствующий метод, нажав кнопку Создать , когда вы получите DNU
- позволяет редактировать код непосредственно в отладчике
- оценивать биты кода, используя do it (cmd-a) и печатать его (cmd-p) команды в коде
- открыть браузер или инспектор из контекстного меню стека, списка переменных и панели кода