Debugging with GDB: Appendix E GDB Remote Serial Protocol. Stub должен уметь читать/писать регистры, читать/писать внутреннюю память, устанавливать/убирать точки останова (опционально) и выполнять программу по шагам (тоже опционально). Это минимальный набор необходимых функций. GDB умеет сам устанавливать программные точки останова через запись в память, а шагание по инструкциям умеет эмулировать при помощи точек останова.
Принцип работы с программными точками останова следующий.
Установка:
- заменить инструкцию по необходимому адресу на генератор программного прерывания (у МК RX мнемоника BRK, например).
Удаление:
- вернуть исходный код операции на место точки останова.
Но самое интересное впереди. Возобновление выполнения программы после попадания на точку останова без её (точки останова) удаления:
- уменьшить счётчик PC на размер инструкции BRK;
- удалить точку останова;
- сделать шаг в одну инструкцию;
- установить точку останова на прежнее место;
- продолжить выполнение программы.
Одно но: если программные точки останова реализованы для всех поддерживаемых архитектур, то программное шагание - всего лишь для нескольких.
Небольшое дополнение: когда GDB клиент просят установить точку останова, он её сохраняет в списке и не более того. Непосредственное изменение памяти программы происходит перед запуском программы. А после остановки программы, по той или иной причине, все точка останова убираются из памяти, что бы быть установленными перед следующим запуском.
Небольшое дополнение: когда GDB клиент просят установить точку останова, он её сохраняет в списке и не более того. Непосредственное изменение памяти программы происходит перед запуском программы. А после остановки программы, по той или иной причине, все точка останова убираются из памяти, что бы быть установленными перед следующим запуском.
Комментариев нет:
Отправить комментарий