Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bolshakov_Poyasnitelnaya_zapiska.doc
Скачиваний:
29
Добавлен:
08.03.2015
Размер:
1.58 Mб
Скачать

2.2.2.1.11 Модель отладки

Ключевым моментом создания отладчика в среде Eclipse выступает разработка его модели, интерфейсы для которой в платформе уже предопределены; их схема представлена на рисунке 2.9.

Рисунок 2.9 – Диаграмма модели интерфейсов платформы отладки Eclipse

Модель отладки, представленная на рисунке, включает всевозможные виды артефактов отладки. Все артефакты должны реализовывать интерфейс IDebugElement (в дополнением к их непосредственным интерфейсам). Модель отладки включает следующие интерфейсы для артефактов отладки, приведенные в таблице 2.4.

Таблица 2.4 – Интерфейсы подсистемы отладки

Интерфейс артефакта отладки

Назначение

IDebugTarget

Цель отладки - отлаживаемый контекст исполнения, такой, как процесс или виртуальная машина.

IExpression

Выражение - некоторый шаблон кода, значение которого может быть вычислено.

IMemoryBlock

Блок памяти - последовательный сегмент памяти контекста исполнения

IRegister

Регистры - именованная переменная в группе регистров.

IRegisterGroup

Группа регистров - группа регистров соответствующая фрейму стека.

IStackFrame

Фрейм стека - контекст исполнения в приостановленном потоке, содержащий локальные переменные.

IThread

Поток - последовательный набор команд исполнения в цели отладки, содержащий фреймы стека.

IValue

Значение переменной

IVariable

Переменная - видимая структура данных во фрейме стека или значении другой переменной.

IWatchExpression

Выражение для просмотра - выражение, которое обновляет свое значение в определенные моменты времени.

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

- Платформа Eclipse многопоточна, поэтому важно, чтобы все классы были потокобезопасны, в том числе те, которые сами по себе работают в одном потоке. В частности, виртуальная машина в рассматриваемом отладчике однопоточна, поэтому все методы модели отладки, которые обращаются к виртуальной машине, должны быть синхронизированы для решения задачи взаимного исключения.

- Действия, совершенные пользователем через графический интерфейс, например, команда “выполнить шаг отладки”, должны быть неблокирующими вызовами (асинхронными). То есть команда пользователя “выполнить шаг отладки” не должна ждать, пока шаг выполнится в виртуальной машине, в противном случае при длительном выполнении шага машиной поток графического интерфейса Eclipse может зависнуть. Корректная (неблокирующая) схема взаимодействие изображена на рисунке 2.10.

Рисунок 2.10 – Неблокирующая схема взаимодействия модели отладки и виртуальной машины

2.2.2.1.12 Виртуальная машина

Существует два способа исполнения пользовательской программы:

1) прямая интерпретация;

2) трансляция с отложенной интерпретацией.

Для рассматриваемой интегрированной среды разработки приемлемым является второй подход, поскольку:

1) программу на языке С невозможно разбить на независимые команды, которые можно было бы интерпретировать; во время отладки требуется исполнение всей программы;

2) процесс интерпретации может производиться много раз после единожды выполненной трансляции.

В качестве виртуальной машины, исполняющей программу, выбрана lua [46], которая исполняет программу на скомпилированном в байт-код скриптовом языке Lua. Выбор именно данной виртуальной машины обусловлен следующими соображениями:

1) виртуальная машина lua кросплатформенна: работает на Windows и UNIX-подобных операционных системах;

2) виртуальная машина высоко оптимизирована, что обеспечивает ее высокую скорость работы;

3) имеется API для использования языка Java (инструмент LuaJava [47]), который является основным языком реализации разрабатываемой системы;

4) виртуальная машина поддерживает кооперативную многопоточность пользовательских программ;

5) лицензия lua подходит как для учебного использования, так и для коммерческого.

Язык Lua является динамически типизированным языком, т. е. на этом языке тип имеют не сами переменные, а их значения, поэтому в языке отсутствуют определения типов. Для интеграции виртуальной машины lua с языком Java возможно использование библиотеки LuaJava, позволяющей скриптам на языке Lua манипулировать Java-объектами (в том числе вызывать их методы).

Важно отметить, что в языке Lua естественен принцип кооперативной многопоточности, осуществляемый за счет так называемых сопроцедур (coroutine). Использование кооперативной многопоточности объясняется малой ресурсоемкостью, в отличие от реализации многозадачности с вытеснением, поскольку для вытеснения задачи необходимо сохранять весь ее контекст. Поскольку для реализации многозадачности в микроконтроллере было решено использовать операционную систему с кооперативной многозадачностью, то наличие подобной функциональности в виртуальной машине позволяет более точно производить моделирование работы программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]