Выбрать главу

include "c:\\program files\\myfile.e"

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

include filename as namespace_identifier Ко всем свойствам обычной include во второй форме прибавляется возможность объявления префикса пространства имён, который может быть прибавлен перед глобальными именами, объявленными в данном включаемом файле, когда к ним производится обращение из текущего главного файла. Эти префиксы могут быть необходимыми, чтобы исключить двусмысленности с некоторыми именами, или вы находите, что ваш код становится с ними более ясным. См. раздел 2.4.2 Сцена (область видимости), чтобы вспомнить другие детали об этих префиксах.

2.6.2 with / without (с / без)

Эти специальные команды (метакоманды) управляют способами, которыми Euphoria транслирует вашу программу во внутреннюю форму (IL). Они не меняют общую логику вашей программы, но влияют на диагностическую информацию, которую вы получаете при исполнении вашей программы. См. также раздел 3. Отладка и профилирование, там есть дополнительные сведения об этих командах.

with Данная команда включает исполнение программы в один из режимов: profile (профиль), profile_time (профиль_времени), trace (трасса), warning (предупреждение) или type_check (проверка_типа) . Режимы warning и type_check включены по умолчанию, тогда как profile, profile_time и trace по умолчанию выключены. Все предупреждения, скопившиеся во время исполнения вашей программы, выводятся на экран после окончания исполнения кода программы. Предупреждения указывают на очень незначительные погрешности в коде и никогда не прерывают выполнение программы. without Данная команда выключает один из отмеченных выше режимов. Имеется также редкий в настоящее время режим with, который обозначается кодовым числом, следующим непосредственно за словом with. В предыдущих версиях Euphoria эти кодовые числа использовались исключительно RDS для сброса счётчика числа команд в редакции "Public Domain".

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

Во включенном файле наследуются заданные установки with/without по состоянию на тот момент, в той точке, где записана команда include. Во включенном файле эти установки могут измениться, но они вернутся к своему оригинальному состоянию по окончании исполнения включенного файла. Например, библиотечный файл может выключить предупреждения для себя самого и (в первый момент) для всех библиотек, которые он сам использует, но он не может выключить таким же образом предупреждения, если они включены и действуют в главном файле.

...

3. Отладка и профилирование

3.1 Отладка

Отладка программ в Euphoria значительно проще, чем в большинстве других языков программирования. Широкие проверки правильности работы программы, обеспечиваемые интерпретатором Euphoria, отлавливают множество таких ошибок, которые могли бы в других языках занять у вас часы на их выявление и исправление. Когда интерпретатор останавливает вашу программу из-за возникшей ошибки, вы всегда получаете на экране краткое сообщение о причине остановки и детальный отчёт в файле, который называется ex.err. В совокупности это сообщение и файл дают полное описание того, что случилось, плюс всю цепочку вызовов подпрограмм, приведшую к аварии. В файле ex.err будет также распечатка величин всех переменных вашей программы и, при необходимости, перечень последних выполненных команд. Слишком длинные ряды распечатываются частично. Если файл ex.err вам почему-то не очень удобен, вы можете выбрать другое имя файла, расположив его в любом месте на вашей системе, но для этого придётся вызвать процедуру crash_file().

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

Иногда программа будет вести себя неправильно, но все проверки, выполняемые интерпретатором во время её работы, будут проходить нормально, не вызывая аварийных остановок. В любом языке программирования в таких случаях может быть хорошей идеей просто ещё раз изучить исходный код и ещё раз продумать алгоритм, который вы запрограммировали. Может оказаться полезной простая вставка команд печати в стратегических точках, чтобы проследить в них внутреннюю логику программы. Этот подход особенно удобен в интерпретируемых языках, подобных Euphoria, так как вы можете просто отредактировать код и перезапустить программу без необходимости каждый раз ожидать перекомпиляции/перекомпоновки.

Интерпретатор обеспечивает вас дополнительными мощными инструментами для отладки. Используя команду trace(1), вы можете наблюдать трассу исполнения вашей программы на одном экране, а на другом - следить за выводимыми ею численными, текстовыми или графическими данными. Команда trace(2) даёт тот же эффект, что и trace(1), но экран трассировки будет монохромным. Наконец, trace(3) выводит все выполненные команды в файл журнала, который называется ctrace.out.

Специальные команды with trace / without trace задают те части вашей программы, которые вы решили трассировать. Часто вы будете просто вставлять команду with trace в самом начале своего исходного кода, чтобы предусмотреть сквозную трассировку всей программы. Но иногда будет лучше, если вы поставите первую with trace после всех ваших собственных типов, так, чтобы не попадать при трассировке внутрь тела типов после каждого присваивания новой величины каждой из ваших переменных. В некоторых других случаях вы будете точно знать, какую подпрограмму или подпрограммы желательно было бы трассировать, и вам будет необходимо отобрать для трассировки только именно их. Конечно, находясь в окне трассировки (на экране трассировки), вы можете пропустить просмотр исполнения любой подпрограммы, нажав на клавиатуре клавишу со стрелкой вниз вместо Enter.

В файле ctrace.out или в файле ex.err для трассируемых строк кода предусмотрен вывод сообщения "Traced lines leading up to the failure" - "Трассируемые строки, предшествовавшие отказу", если во время работы программы произойдёт аварийная остановка из-за обнаруженной ошибки. Если вам необходима эта информация, но вы не получаете её, необходимо вставить в код команду with trace, а затем перезапустить программу. Работа программы замедляется на тех участках кода, которые откомпилированы с метакомандой with trace, особенно, когда для включения (активации) трассировки используется команда trace(3).

После того, как участок кода, подлежащий трассировке, выделен метакомандами, ваша программа должна затем динамически активировать (включать) процесс трассировки командой trace(). Вы можете просто написать:

with trace

trace(1)

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