Прочие типы брейкпоинтов

Вернуться на главную страницу

Содержание

Прочие типы брейкпоинтов

Эти условия выставляются отдельно в окне Debugger'а, а не в окне создания брейкпоинта. Они не отображаются в общем списке брейкпоинтов. Состояние галочек хранится в файле .deb.

Break on Bad Opcodes

Брейкпоинт рекомендуется для регулярного использования новичками. Галочка находится под списком брейкпоинтов.

Условие данного брейкпоинта - приостановить эмуляцию при попытке выполнить UNDEFINED инструкцию. Обычно это байт #$FF.

Поскольку неофициальные инструкции процессора также отображаются как UNDEFINED, на них тоже будет срабатывать этот брейкпоинт, даже если код игры работает без ошибок. Но такие встречаются очень редко.

Этот тип брейкпоинта подходит для тестирования своего кода, чтобы убедиться, что прыжки и условные переходы были записаны верно. Также поможет заметить ошибку в коде из-за неправильно подключенного номера банка PRG. Если брейкпоинт срабатывает во время игры, то даже когда в геймплее багов не заметно, в коде явно что-то не в порядке.

Брейкпоинт не всегда помогает найти неправильно записанную инструкцию, поскольку даже кривой прыжок может перейти на опкод, который будет распознан Debugger'ом как один из известных ему, и брейкпоинт не сработает. Но в любом случае данный брейкпоинт увеличит твои шансы в поисках бага.

Условия на счетчики

CPU cycles - счетчик тактов, Instructions - счетчик выполненных инструкций. Оба счетчика находятся под флагами.

Число рядом со счетчиком отображает его накрутку с момента его последнего обнуления.

Даже если окно Debugger'а ни разу не было открыто после запуска эмулятора, счетчики все равно будут накручиваться в процессе эмуляции игры.

Число в скобках отображает его накрутку с момента последней паузы эмулятора через Debugger.

Например, можно будет посмотреть количество выполненных инструкций между двумя срабатываниями брейкпоинтов.

Кнопка Reset counters обнуляет все показания обоих счетчиков.

Счетчики автоматически обнуляются после Soft Reset и Hard Reset, а также при первом запуске игры.

CPU cycles

Выполнение одной инструкции занимает у процессора от 2-х до 6-ти тактов. При выполнении инструкци счетчик будет увеличиваться на то число, сколько тактов потребовалось у процессора на выполнение этой инструкци.

Один кадр длится примерно 30.000 тактов (для PAL примерно 33.500), потом начинается следующий кадр. Если один из твоих брейкпоинтов в списке срабатывает ежекадрово, то количество тактов между срабатываниями поможет это подтвердить.

С помощью просмотра данных счетчика тактов можно оценить нагрузку определенной части кода на процессор.

Чтобы выставить условие на количество тактов, эмулятор должен стоять на паузе, затем нужно обнулить счетчик. Далее в поле ввода ты указываешь нужное количество тактов, и ставишь галочку.

После этого снимаешь эмулятор с паузы. Debugger остановит эмуляцию игры в том случае, когда выполненные инструкции накрутят 1000 или более тактов. Количество тактов будет выделено синим, сообщая, что сработало условие данного брейкпоинта.

Прежде чем снять эмулятор с паузы, нужно деактивировать галочку. Иначе эмулятор при попытке сняться с паузы просто выполнит следующую инструкцию и снова встанет на паузу, поскольку условие брейкпоинта "приостановить эмуляцию при достижении >= тактов в условии" будет продолжать действовать постоянно с активной галочкой.

Instructions

Счетчик выполненных инструкций будет просто увеличиваться на 1 после каждой выполненной инструкции. На него можно ставить условие точно также, как и на счетчик тактов, и работать он будет по такому же принципу.

Этот счетчик гораздо менее полезен по сравнению со счетчиком тактов.

Кнопки

Эти 2 кнопки работают как брейкпоинты с условием.

Подробнее читай в статье с кнопками.

Step Out

Выполнение оставшегося кода в текущей подпрограмме и выход из нее.

Step Over

Выполнение кода внутри подпрограммы (инструкция JSR) по адресу кнопки Seek PC и выход из нее.