Inferno OS Wiki
Регистрация
Advertisement

Введение[]

Эта глава представит вам основные инструменты, формирующие окружение разработчика в Inferno.

  • Редакторы текста - Notepad и Brutus
  • Компиляторы Limbo - независимые и зависимые от платформы
  • Отладчик - для отладки на уровне исходного кода
  • Менеджер модулей - для просмотра объектного кода
  • Менеджер задач - для управления запущенными процессами

За исключением компиляторов Limbo, все средства разработки являются графическими приложениями.

В этой главе, inferno_root - это каталог, в который была установлена ОС Inferno. Например, в случае с Windows, это будет c:\users\lnferno, для среды Unix это будет /usr/inferno.

Соглашение по именованию файлов[]

По соглашению файлы используют следующие расширения:

filename.b Файл с исходным кодом Limbo.
filename.dis Файл двоичного образа выполняемый виртуальной машиной Dis; создается на этапе компиляции.
filename.m Файл исходного кода модуля Limbo.
filename.s Ассемблерный код; опционально создаваемый во время компиляции.
filename.sbl Файл отладочной информации; опционально создаваемый во время компиляции.

Имена файлов не могут быть длиннее 27 символов. Разрешены только буквы, цифры, тире (-), подчеркивание (_) и точка (.).

Разработка приложений[]

Процесс разработки приложений на Limbo очень похож на процесс разработки приложений в других средах программирования. Обычно он сводится к следующим действиям:

  • С помощью Notepad или Brutus пишется программа
  • Компилируеся используя компилятор Limbo
  • Отлаживается с помощью отладчика (Debugger)
  • Просматривается программа с помощью Dis Module Manager
  • Отслеживается ее выполнение с помощью менеджера задач (Task Manager)

Написание программ в Notepad[]

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

Запуск Notepad[]

// неправильный путь В меню менеджера окон выберете Inferno >> Development Tools >> Notepad. Приложение Notepad появится на экране.

P138

Сохранение файла в Notepad[]

Для того, чтобы сохранить новый файл (который ранее не был сохранен), выберите опцию File >> Save As. Вызовется всплывающее окно File.

P139 01

Введите имя файла и нажмите Enter.

Для того, чтобы сохранить файл после редактирования, выберите File >> Save.

Создание нового файла в Notepad[]

Чтобы создать новый файл в Notepad выберите File >> New.

Поиск в Notepad[]

  1. Когда файл открыт выберите Search >> Search For. Высветится всплывающее окно Search For.

P139 02

  1. Наберите текст, который хотите найти и нажмите Enter. Первый его экземпляр подсветится.
  1. Чтобы повторить поиск того же текста, выберите Search >> Search.

Редактирование исходного файла в Notepad[]

В Notepad выберите File >> Open. Диалоговое окно Open выведется на экран.

P140

Выход из Notepad[]

Выберите File >> Exit.

Редактирование примера[]

Привем пример создания написания простой программы:

  1. Запустите Notepad и введите следующий текст в новый файл.
implement Hello;

include "sys.m";
sys: sys; include "draw.m";

Hello: module{
    init: fn(ctxt: ref Draw->context, argv: list of string);
};

init(ctxt: ref Draw->context, argv: list of string) {
    sys = load Sys Sys->PATH;
    sys->print("Hello, world\n");
}

P142

  1. Выберите File >> Save As.
  1. В всплывающем окне File, введите hello.b .

P143

  1. Нажмите Enter. Файл /usr/hello.b сохранен.

Написание программы в Brutus[]

В Inferno есть другой редактор под названием Brutus, который может быть использован для написания исходного кода на Limbo. Интересной особенностью Brutus является то, что в него входит поддержка плюмбинга, который позволяет автоматически открывать файлы описания Limbo-модулей.

Brutus также поддерживает создание SGML(стандартный обобщённый язык разметки) файлов.

Введение в Brutus[]

// неправильный путь

1. Выберите Inferno >> Applications >> Text Editor чтобы вызвать редактор Brutus.

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

P145

Сохранение файла в Brutus[]

2. В редакторе Brutus, выберите File >> Write. Появится диалоговое окно записи файла.

P146

3. Для того, чтобы сохранить файл в каталог /usr введите имя файла и нажмите OK.

Создание нового файла в Brutus[]

В Brutus выберите File >> New.

Открытие существующего файла в Brutus[]

1. В Brutus выберите File >> Open.

P147

2. Выберите Browse.

P148

3. Выберите файл для открытия - hello.b, и нажмите Open. Файл откроется в Brutus.

Использования плюмбинга в Brutus[]

1. Откройте файл hello.b в Brutus

P149

2. Наведите курсор на имя файла, например sys.m, нажмите правую кнопку мыши. Файл откроется.

P150

Переключение между различным открытыми экземплярами Brutus[]

Вы можете запустить более одного экземпляра Brutus. Добавочные экземпляры Brutus перечислены в меню File. Выберете File >> имя_файла чтобы вызвать тот экземпляр Brutus, в котором открыт этот файл.

Выход из Brutus[]

1. Нажмите кнопку Закрыть на окне.

Если изменения не сохранены, вызовется диалоговое окно Warning с предупреждением.

P151

2. Выберите Write (записать) чтобы выйти из Brutus и сохранить изменения или Proceed для выхода без сохранения изменений, или Cancel, чтобы вернуться в файл не закрывая Brutus.

Компилирование программ[]

После того как вы написали файл с исходным кодом на Limbo, используйте компилятор чтобы создать исполняемый модуль. Компилятор переводит исходный код на Limbo в машинно-независимые двоичные файлы (по умолчанию им дается разрешение .dis) для выполнения на виртуальной машине Dis.

Существует два компилятора для генерации Dis-файлов (.dis):

  • Машинно-зависимый компилятор который запускается из родной ОС.
    • Windows. Исполняемый файл компилятора называется limbo.exe, и располагается в каталоге /Nt/386/bin.
    • UNIX. Исполняемый файл компилятора называется limbo и лежит в каталоге /Solaris/sparc/bin или /Solaris/386/bin (вместо Solaris вставьте имя своей ОС), в зависимости от платформы.
  • Машинно-независимый компилятор, написанный на Limbo запускается внутри Inferno. Он (Limbo.dis) расположен в каталоге /dis.

Двоичные файлы, генерируемые обоими компиляторами идеинтичны.

Использования машинно-зависимого компилятора[]

Пример компиляции в Windows.

  1. Откройте окно MS-DOS выбрав Start >> Programs >> MS-DOS Prompt

На экран выведется окно MS-DOS Prompt

P153

Перейдите в каталог c:\users\lnferno\Nt\386\bin или скопируйте файл limbo.exe в удобный для вас каталог.

  1. Перейдите в каталог, в который вы сохранили файл hello.b:
cd \users\lnferno\usr\ckania

P154

  1. Откомпилируйте программу hello.b введя: "limbo hello.b".

P155

Просмотрите содержимое каталога чтобы увидеть, что файл hello.dis был создан.

P156

Имейте в виду, что результирующий файл hello.dis может быть исполнен только внутри Inferno.

Использование машинно-независимого компилятора.[]

  1. Откройте окно командного интерпретатора в менеджере окон

P157

Перейдите в каталог, содержащий файл hello.b:

cd /usr/inferno
  1. Откомпилируйте программу hello.:
limbo hello.b

P158

  1. Проверьте наличие файла hello.dis

P159

  1. Запустите результат своей работы:
hello

P160

Опции компилятора[]

Пример команды компилятора с одним ключем:

limbo -g hello.b

// TODO

Флаг -g создает файл с таблицей символов нужный отладчику. В результате получаются файлы hello.dis и hello.sbl. Об полного списка всех параметров компилятора смотрите limbo - компилятор limbo в Inferno Reference Manual.

Отладка программ[]

Чтобы отладить модуль, который разрабатывается, вызовете компилятор Limbo с параметром командной строки -g. Этот параметр заставляет компилятор выводить дополнительную информации, которая нужна отладчику в файл с таблицей символов.

Замечание: Для того чтобы использовать отладчик Limbo, EMU должен быть запущен в режиме интерпретатора. За подробностями о режимах работы emu обращайтесь к Inferno Reference Manual.

Следующие файлы требуются отладчику для выполнения действий над модулем.

.b - Исходный код Limbo .dis - Скомпилированный код Dis .sbl - Файл таблицы символов

Запуск отладчика[]

Отладчик это графическое приложение запускаемое из менеджера окон. Для запуска отладчика выберите Inferno>>Development Tools>>Limbo Debugger из менеджера окон. Рисунок 4-22 показывает открывающиеся окна когда вы запускаете отладчик.

Рисунок 4-22 Окно отладчика Limbo

P162

Окно стека в отладчике[]

Окно стека поделено на две панели. левая панель испоьзуется для выбора какую информацию отображать, и правая панель показывает содержиание стека. Первоначально, различные части пространства имен представлены кнопками в "закрытом" состоянии.

По щелчку, кнопки раскрывают дальнейшие подробности (включая локальные имена переменных) и их текущие значения показываются в соответствующей строке на правой панели.

Рисунок 4-23 Примерный вид окна стека

P163

Управляющее окно отладчика[]

Когда вы запускаете отладчик Limbo, на заднем плане открывается управляющее окно отладчика. Это окно используется для управлением процессом отладки.

Меню File используется для выбора модуля (нити) для отладки. Этот модуль может быть одним из следующих:

  • Уже запущенная нить выбранная через File>>Threads. Нить может быть также выбрана через Inferno>>Shell>>Task Manager.
  • Вновь созданная нить программы запущенной посредством File>>Open.

Когда вы открываете нить для отладки, также будет показан исходный файл Limbo, как на Рисунке 4-2.

Рисунок 4-2 Исходный файл Limbo в окне отладчика

P165

Кнопки отладчика[]

В Таблице 4-1 описаны кнопки расположенные слева в окне управления отладчика.

Таблица 4-1 Кнопки отладчика // Вместо знака # вставить иконки

P166 01 Убить текущий процесс (Red X)
P166 02 Остановить отладку текущего процесса (Green X)
P166 03 (Одна кнопка появляется дважды) Запустить до точки останова (Green-Filled Circle) - Ready
P166 04 Run to breakpoint Stop (Red Octagon) - Running
P166 05 Выполнить одну команду
P166 06 Выполнить один оператор
P166 07 Выполнить вызов
P166 08 Выполнить до конца функции
P166 09 Установить/Очистить точку останова (Red X, Green Arrow)

Использование отладчика[]

После выбора нити для отладки или открытия файла с исходным текстом программы, щелкните на кнопке "Run to Breakpoint Start" для начала выполнения нити. По умолчанию, программа останавливается на первом выполняемом операторе. Вы можете отлаживать только одно приложение за раз. Приложение может запускать дополнительные нити и загружать модули при необходимости, но отладчик может загрузить только одно приложение. Вы можете изменить действие отладчика через установки опций. Смотри раздел Установка Опций Отладчика.

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

Пошаговое выполнение внутри функций[]

Когда вы проходите по программе по одному приложению за раз, есть несколько интересных этапов, когда вызов функции может быть замечен:

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

Точки останова[]

Точки останова - удобный метод для остановки и запуска программы которую вы отлаживаете.

Установка точки останова 1. Выберите часть кода, на которой следует вызвать остановку. 2. Нажмите на кнопку Set/Clear Breakpoint. Выбранный код высветится красным. Также, число точек останова отразится в окне Break.

Очистка точки останова: 1. Выберете ту часть кода, где была установлена точка останова. 2. Нажмите на кнопку Set/Clear Breakpoint. Код вернет свой номальный цвет и связанная с ним число точки останова удалится из окна Break.

Использование плюмбинга в отладчике[]

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

Рисунок 4-25 Плюмбинг и отладчик

P169

Так же и в Brutus, возможности плюмбинга можно использовать для открытия связанных файлов-модулей. Смотрите раздел "Использование Плюмбинга в Brutus" ранее в этой главе.

Завершение программы[]

В конце каждой программы имеется неявня точка останова , так же как и первый выполняемый оператор. Для дальнейшего продолжения, программа должна быть прервана щелчком по кнопке "Stop Debugging Process". Позже вы можете перезапустить программу щелкнув по кнопке "Run to Breakpoint Start". По умолчанию, все другие нити созданные отлаживаемой программой будут прерваны на выходе.

Установка опций отладчика[]

Вы можете изменить режим работы отладчика через набор опций. Для отображения опций отладчика выберите File>>Options. Выберите General для просмотра страницы опций.

Рисунок 4-26 Закладка опций General

P171

Опции отладчика General следующие:

  • Executable module - Исходный файл модуля загруженный в отладчике, или если модуль не загружен вы можете набрать путь и имя файла модуля в этом поле.
  • WM program - Выберите эту опцию когда вы отлаживаете модули испоьзующие оконный менеджер. Выбор этой опции отправляет дополнительные начальные аргументы программе, такие как размещение создаваемого окна 20 на 20 пикселей в левой части Окна Управления отладчика. Последующие окна, если они открываются, так же будут приведены к размеру 20 х 20 пикселей и размещены каскадом.
  • Program Arguments - Наберите необязательные аргументы командной строки передаваемые программе, когда она выполняется в отладчике.
  • Working Directory - Это поле показываеткаталог, в котороммогут быть найдены исполняемые файлы (.dis) и таблицы символов (.sbl). Если значение не задано, вы можете набрать путь в этом поле.

Выберите Thread для отображения опций которые управляют тем, как отладчик обрабатывает операции и нитями.

Рисунок 4-27 Закладка опций Thread

P172

  • Block/Run New Threads - Выбор Block new threads запретит создание загруженной в отладчике программой новых нитей. Новые нити создаются, но переходят в заблокированное состояние. Эта опция полезна когда отлаживаются вызовы других модулей которые могут быть не завершены или недоступны в данный момент. Выбор пункта Run new threads позволяет программе загруженной в отладчике создавать новые нити.
  • Kill/Detach Threads on Exit - Выбор Kill threads on exit будет завершать любые нити созданные во время отладки, когда отладчик закрывается. Выбор пункта Detach threads on exit не прерывает выполнение созданный во время отладки, когда отладчик закрывается.

Изменения сделанные в этом диалоговом окне вступают в силу поле шелчка на кнопке Ok. После того как вы звершили установку опций в окне Wmdeb, щелкните на Ok.

Использование Поиска[]

Пока исходный файл загружен в отладчике, вы можете пользоваться функцией поиска строки символов в исходном коде. 1. Выберите Search >>Search for. Будет выведен диалоговое окно поиска.

P173

2. Наберите символы для поиска. 3. Нажмите Enter. Первое найденные символы будут выделены цветом. Меню Search отображает текущую строку поиска. 4. Выберите Search>>(ваша строка) для поиска следующего экземпляра строки. 5. Для поиска в выделенном тексте, выделите некоторый текст и затем выберите Search >> Look.

Просмотр программ при помощи Dis Module Manager[]

С помощью Dis Module Manage вы можете просматривать объектный код (*.dis файлы) для виртуальной машины Dis и видеть подробности объектного коа, такие как информацию о заголовке, сегмент кода, сегмент данных, описатели типа, описатели ссылок.

Запуск Dis Module Manager[]

Из оконного менеджера, выберите Inferno >> Inferno Development Tools >> Module Manager. Будет запущен Dis Module Manager.

Рисунок 4-28 Dis Module Manager

P174

Открытие файла с объектным кодом[]

1. В окне Dis Module Manager выберите File >> Open Module. Будет отображено диалоговое окно Open Dis File.

Рисунок 4-29 Диалоговое окно Open Dis File

P175

выберите файл для просмотра и нажмите Open. Могут быть просмотрены только объектные файлы (.dis файлы). Файл открывается и отображается сегмент кода объектного файла.

Рисунок 4-30 Dis Module Manager - Сегмент кода

P176

Просмотр свойств файла[]

Вы можете просматривать различные аспекты объектного кода файла в Dis Module Manager. 1. Для просмотра секции заголовка объектного файла, выберите View >> Header. Будет отображена секция заголовка

Рисунок 4-31 Dis Module Manager - Заголовок

P177

2. Для просмотра сегмента данных объектного файла выберите View >> Data Segment. Будет отображен сегмент данных

Рисунок 4-32 Dis Module Manager - Сегмент данных

P178

3. Для просмотра опистелей типа выберите View >> Type Descriptors. Будут отображены описатели типа

Рисунок 4-33 Dis Module Manager - Описатели типа

P179

4. Для просмотра описателей ссылок выберите View >> Link Descriptors. Будут отображены описатели ссылок

Рисунок 4-34 Dis Module Manager - Описатели ссылок

P180

5. Для просмотра сегмента кода выберите View >> Code Segment. Будет отображен сегмент кода Рисунок 4-35 Dis Module Manager - Сегмент кода

P181

Выход из Dis Module Manager[]

Кликните на кнопку закрытия окна Dis Module Manager. Dis Module Manager закроется. Примечание: Запись .dis модулей и запись .s модулей из меню File в настоящий момент не поддерживается. Опции меню Properties в настоящий момент не поддерживаются.

Мониторинг запущенных программ при помощи Task Manager[]

В Inferno предусмотрен Task Manager для просмотра нитей запущенных приложений, отладки запущенных нитей и прерывания выполняющихся нитей.

Запуск Task Manager[]

Для запуска Task Manager выберите Inferno >> Development Tools >> Task Manager. Будет запущен Task Manager.

P182

Пример запуска отладчика из Task Manager[]

Для использования отладчика с запущенным приложением, вам понадобиться скомпилировать приложение с опцией создающей таблицу символов, нужную отладчику. Смотри раздел Компиляция программ. Если таблица символов в том жекаталоге что и приложение, отладчик найдет ее, иначе запросит местоположение файла символьной таблицы.

1. В окне EMU скопируйте файл /appl/wm/coffee.b в свой пользовательский каталог. Например: cp /appl/wm/coffee.b /usr/inferno Нажмите Enter.

Рисунок 4-37 Копирование файла /appl/wm/coffee.b

P183

2. Для повторной компиляции с опцией -g (создающей символьную таблицу - файл .sbl), наберите: limbo -g coffee.b Нажмите Enter.

Рисунок 4-38 Компиляция с опцией -g

P184

3. Убедитесь, что файл coffee.sbl существует набрав: ls *.sbl Нажмите Enter.

Рисунок 4-39 Файл символьной таблицы доступен

P185

Запустите Task Manager выбрав nferno >> Development Tools >> Task Manager. Появится окно Task Manager.

Рисунок 4-40 Task Manager - Приложение Coffee не запущено

P186

В оконном менеджере запустите приложение, которое вы хотите отладить. Запустите вновь скомпилированную версию приложения Coffee набрав в приглашении командного интерпретатора: coffee Появится приложение Coffee.

Рисунок 4-41 Приложение Coffee

P187

6. Щелкните на заголовке окна Task Manager, чобы оно получило фокус. Окно Task Manager пополнилось и отображает нити ассоциированные с приложением Coffee. В любой момент вы можете щелкнуть на кнопке Refresh для обновления окна Task Manager.

Рисунок 4-42 Нити Coffee в окне Task Manager

P188

7. В окне Task Manager щелкните по первой ните помеченной coffee для ее выбора. Нить будет выделена цветом.

Рисунок 4-43 Нить Coffee выделенная цветом

P189

Щелкните Debug. Запустится Отладчик и загрузит файл coffee.b

Рисунок 4-42 Нити Coffee в окне Task Manager

P190

Обратитесь к предыдущему разделу Отладка Программ для дополнительной информации.

Завершение нити[]

Замечание: С осторожностью пользуйтесь командой Kill в Task Manager. Завершение нити процесса такой как Window Manager может явиться причиной внезапного останова Inferno. В Task Manager выберите нить для завершения, затем нажмите Kill.

Просмотр связанных управляющих файлов[]

Для просмотра управляющих файлов связанных с выполняющейся нитью, выберите сначала нить в Task Manager, затем выберите Files. Связанные управляющие файлы будут показаны в Блокноте.

Рисунок 4-45 Управляющие файлы

P191

Выход из Task Manager[]

Для выхода из Task Manager щелкните на кнопку закрытия.

Инструменты конкурентного программирования Limbo[]

Язык Limbo поддерживает параллелизм распределенных приложений на уровне модулей. Limbo использует принцип передачи сообщений для поддержки кооперативной или конкурентной синхронизации. Limbo может пользоваться SPIN для проверки или помощи в проектировании распределенного приложения. поддержка конкурентной синхронизации в Java не поддерживается проверкой SPIN.

Инструментарий SPIN описан в книге G. Holzmann изданной в Prentice Hall, озаглавленной "Design and Validation of Computer Protocols".

Подробную информацию о SPIN и бесплатные средства разработки могут быть получены по адресу: http://netlib.bell-labs.com/netlib/spin/whatispin.html

Advertisement