Читаем Язык программирования Euphoria. Справочное руководство полностью

Иногда программа будет вести себя неправильно, но все проверки, выполняемые интерпретатором во время её работы, будут проходить нормально, не вызывая аварийных остановок. В любом языке программирования в таких случаях может быть хорошей идеей просто ещё раз изучить исходный код и ещё раз продумать алгоритм, который вы запрограммировали. Может оказаться полезной простая вставка команд печати в стратегических точках, чтобы проследить в них внутреннюю логику программы. Этот подход особенно удобен в интерпретируемых языках, подобных 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)


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


if x then

trace(1)

end if


Аналогично, вы можете выключить (деактивировать) трассировку командой trace(0). Вы можете также выключить трассировку интерактивно, с клавиатуры, нажав клавишу 'q'. Не забывайте, что метакоманда with trace должна быть записана вне тела подпрограммы, т.е. на высшем уровне кода, в то время как команды активации trace() можно писать и внутри подпрограмм, и вне их.

Иногда вам будет необходимо активировать трассировку изнутри типа. Предположим, что вы запускаете программу, а она останавливается с файлом ex.err, из которого следует, что одна из ваших переменных приняла некоторое странное значение, величина которого хотя и законна, но вас удивляет, как это вообще могло произойти. Просто создайте тип для этой переменной, в котором команда trace(1) выполняется, если присваиваемая переменной величина принимает то странное значение, которое так вас заинтересовало, то есть,


type positive_int(integer x)

if x = 99 then

trace(1) -- как это может быть???

return 1 -- продолжать

else

return x 0

end if

end type


Когда positive_int() завершится, вы увидите именно ту команду, которая присвоила вашей переменной странное значение, и тогда сможете проверить величины других переменных, вовлечённых в это действо. Вы сможете также проверить выходной экран вашей программы, чтобы увидеть, что происходит именно в этот момент. Если вы определите positive_int() так, чтобы для странной величины (99) выдавался 0 вместо 1, это вызовет остановку программы с распечаткой диагностической информации в файл ex.err.


3.1.1 Экран трассировки

Перейти на страницу:

Все книги серии Euphoria

Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

Программирование, программы, базы данных

Похожие книги

Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT