Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MUMPS СУБД. Практика применения и опыт программирования.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
5.7. MINIM DEBUGGER 401
В этом разделе описания команд BREAK и ZBREAK приведены ил­люстративно, чтобы составить предствление о характере их примене­ния. Для применения на практике отладчика, основанного на командах BREAK и ZBREAK, программисту необходимо ознакомиться с докумен­тацией на используемую MUMPS систему, включая возможные особен­ности ее версии.
Принцип отладки, основанный на применении команд BREAK, в дей­ствительности, несмотря на кажущуюся сложность, прост и позволяет отлаживать CHUI программы или отдельные фрагменты кода в тради­ционном для MUMPS систем консольном режиме. К такому режиму от­носятся консоли, терминалы и различные телнет-клиенты. Фактически, программист может вести отладку, соединившись с MUMPS системой удаленно, и для работы такого отладчика не требуются дополнительные программные средства.

5.7 MiniM Debugger

Отладчик MiniM Debugger встроен в редактор исходного кода MiniM Routine Editor. Отладчик поставляется бесплатно в составе инсталлятора MiniM и всегда соответствует по своей версии той же версии MiniM. Использование отладчика MiniM Debugger из одной версии MiniM с другой версией MiniM не рекомендуется из-за возможных отличий в нюансах версий. При этом в остальном работа самого редактора MiniM Routine Editor возможна с другими версиями сервера MiniM.
Клиентская часть отладчика MiniM Debugger работает под опера­ционной системой Windows и выполнена как Win32 приложение. При этом серверная часть может работать как на этом же, так и на другом компьютере и быть как 32 битной так и 64 битной.
Отладчик MiniM Debugger может подключиться как к имеющемуся процессу, так и запустить новый в виде консоли или фонового процесса, причем для запуска консоли необходимо, чтобы серверная часть работа­ла на том же компьютере. Кроме того, поддерживается опция автомати­ческого присоединения к следующему процессу MiniM, который будет запущен. В этом случае отладчик присоединяется к процессу независи­мо от способа его запуска, это может быть телнет доступ, обслуживание страницы MWA, подключение через MiniM Server Connect от любой клиентской программы, использующей его, или любой другой способ запуска процесса.
Отладчик MiniM Debugger не использует устройства ввода-вывода отлаживаемого процесса, и процесс исполняется в своем естественном
402 ГЛАВА 5. ОБРАБОТКА ОШИБОК
контексте, как есть.
Отсоединение от отлаживаемого процесса производится независимо от способа его запуска, был ли запущен новый процесс или отладчик присоединился к уже запущенному.
Точно также, независимо от способа запуска отлаживаемого процес­са производится его принудительное завершение по команде отладчика. Таким образом, отладчик MiniM Debugger может терминировать выпол­нение произвольного процесса.
К функциям отладчика MiniM Debugger относятся:
1. Attach - присоединение к имеющемуся процессу или запуск нового, или ожидание запуска нового.
2. Run - продолжить выполнение процесса пока он не остановится на точке останова.
3. Pause - остановить выполнение процесса в его текущей точке вы­полнения.
4. Reset - принудительно завершить процесс.
5. Detach - отсоединиться от отлаживаемого процесса, после чего про­цесс продолжает свое выполнение естественным образом, без оста­новов на точках останова.
6. Step Over - выполнить строку команд, либо выполнить строку ко­манд без входа на более глубокий уровень стека, либо выйти на предыдущий уровень стека в зависимости от хода выполнения про­цесса.
7. Step Into - выполнить строку команд, либо войти при ее выполне­нии на более глубокий уровень стека, либо выйти на предыдущий уровень стека, в зависимости от хода выполнения процесса.
8. Run to Cursor - выполнять процесс пока не остановится на строке где назодится курсор, без создания отдельной точки останова, либо пока не остановится на иной заданной точке останова.
Отладчик MiniM Debugger показывает о процессе его состояние в виде текущего стека исполнения, список установленных точек останова, список вычисляемых выражений и их значения в процессе в состоянии останова, и предопределенный список системных переменных процесса.
Точки останова могут быть объявлены или сняты независимо от то­го, исполняется ли отлаживаемый процесс, или остановлен отладчиком.
5.7. MINIM DEBUGGER 403
Если точки останова объявлены в редакторе MiniM Routine Editor, то по завершению процесса и старте нового все они будут применены так­же к новому процессу и не будут утрачены с локальными переменными завершившегося процесса.
Точки останова могут быть установлены только на строку в рутине, и точке нельзя добавить условие срабатывания. Точки останова на из­менение переменных не могут быть установлены.
Отладчик MiniM Debugger может отлаживать только непосредствен­ный исполняемый код, и точки останова могут быть установлены только в рутинах типа INT.
Выражения для просмотра их значений (Watch) могут быть добавле­ны как из списка выражений, так и из редактора кода командой основ­ного меню.
Отладчик MiniM Debugger может показывать значения локальных переменных и выражений во всплывающей строке подсказки в состоя­нии останова. Значение показывается при наведении курсора на имя ло­кальной переменной или при наведении на выделенный фрагмент текста. В случае если синтаксически это выражение соответствует значимому с точки зрения языка MUMPS и вычисляется как строка, то значение показывается во всплывающей подсказке (Tooltip Evaluation).
Эта функциональность использует лишь фрагмент текста, если он синтаксически является именем локальной переменной (в этом случае выделение текста необязательно), либо выделенный фрагмент текста без учета какой именно синтаксической конструкции он принадлежит. В частности, может быть выделен фрагмент имени рутины как несколь­ко символов, но Tooltip Evaluation получит в качестве синтаксической конструкции последовательность латинских символов, что синтаксиче­ски соответствует имени локальной переменной. Tooltip Evaluation может вычислить как простые значения, так и значения выражений произволь­ной сложности.
Вычисление выражений производится в контексте отлаживаемого про­цесса, и, если при вычислении выполняется побочное действие, то оно также останется в контексте процесса, например модификация глобаль­ных или локальных переменных при вычислении выражения с функцией $INCREMENT(). Таким образом, программист может написать допол­нительные собственные функции на языке MUMPS, чтобы при их вы­числении производился побочный эффект в виде присваивания, для мо­дификации переменных из отладчика, равно как и специальные функции декодирования данных для показа значений в необходимом программи­сту виде.
Отладчик MiniM Debugger работает в режиме только построчного
404 ГЛАВА 5. ОБРАБОТКА ОШИБОК
пошагового исполнения отлаживаемого процесса, или переходит либо на уровень стека ниже, либо на уровень стека выше.
По клавишным комбинациям отладчик MiniM Debugger максимально
приближен к продуктам Borland (Delphi, C++ Builder).
5.8 Cach´e Debugger
Отладчик Cach´e Debugger встроен в редактор исходного кода Cach´e Studio. Отладчик поставляется бесплатно в составе инсталлятора Cach´e и всегда соответствует по своей версии той же версии Cach´e. Использо­вание отладчика Cach´e Debugger из одной версии Cach´e с другой версией Cach´e не рекомендуется из-за возможных отличий в нюансах версий.
Интерфейс отладчика выполнен как часть Cach´e Studio, соответ­ственно вне зависимости от версии операционной системы на которой работает сервер, отладчик работает на операционной системе Windows. При этом отладчику не важно, выполняется отлаживаемый процесс на том же или на другом компьютере.
Отладчик Cach´e Debugger может подключиться к имеющемуся на сервере процессу Cach´e, запустить новый процесс, или запустить новый для выполнения ZEN или CSP страницы.
Новый процесс, запущенный с указанной метки, выполняется как новый JOB, и имеет устройством ввода-вывода по умолчанию такое, ко­торое используется отладчиком Cach´e Debugger для показа вывода про­цесса. Обычно таким устройством является устройство типа |TCP| или терминал. Если отлаживаемый процесс обращается к команде READ, то выполнение такой команды останавливает процесс и переводит в ожида­ние, в котором программист не может ничего ввести. Для этого случая есть команда отладчика Interrupt, выполнение которой прерывает выпол­нение текущей исполняемой команды с переходом к следующей. Коман­ды WRITE выполняются корректно, и весь вывод, включая служебный вывод отладчика, отображается в специальном окне Output.
К функциям отладчика Cach´e Debugger относятся:
1. Attach - присоединиться к указанному имеющемуся процессу.
2. Go - запустить выполнение процесса далее пока не сработает усло­вие останова. Если не было текущего отлаживаемого процесса, то отладчик запускает новый, как указано в опциях запуска нового процесса.
5.8. CACH´E DEBUGGER 405
3. Restart - завершает выполнение текущего процесса и запускает новый как указано в опциях запуска нового процесса.
4. Stop - заканчивает текущую сессию отладки в зависимости от спо­соба присоединения к отлаживаемому процессу - если было при­соединение к уже имеющемуся, то процесс продолжает работу без отладчика, если был запущен новый, то процесс завершает работу.
5. Break - остановить выполнение процесса в его текущей точке вы­полнения, где бы он ни находился.
6. Interrupt - прервать выполнение текущей выполняемой команды.
7. Step Into - выполнить очередную команду и остановиться перед следующей, а также выполнить вход в процедуру или функцию на один уровень стека глубже или на следующую итерацию цикла.
8. Step Over - выполнить текущую команду и остановиться перед следующей, при этом пропустить вызов процедуры или функции, создающей при выполнении уровень стека, или остановиться на ко­манде, следующей за блоком команд (после безаргументной формы DO).
9. Step Out - выполнить шаг на один уровень стека выше для блока команд или вызова функции или процедуры, и остановиться на следующей команде на предыдущем уровне стека.
10. Run to Cursor - выполнять процесс пока не остановится на строке где назодится курсор, без создания отдельной точки останова, либо пока не остановится на иной заданной точке останова.
Отладчик Cach´e Debugger показывает о процессе его состояние в виде текущего стека исполнения, список установленных точек останова, список вычисляемых выражений и их значения в процессе в состоянии останова.
Точки останова могут быть установлены как на место в коде, так и на локальные переменные. Точка останова по строке проверяется при передаче управления на первую команду в этой строке, а точка оста­нова по локальной переменной проверяется при любом изменении этой локальной переменной, любого ее узла. Оба типа точек останова мо­гут иметь необязательные условия останова, при выполнении которых отладчик останавливает процесс. Если условие останова не указано, то условие считается всегда истинным. Если указано, то рассматривается
406 ГЛАВА 5. ОБРАБОТКА ОШИБОК
как выражение на языке Cache Object Script и вычисляется. В этом слу­чае точка останова активируется, если это выражение вычислилось как истина.
Точки останова могут быть объявлены или сняты независимо от то­го, исполняется ли отлаживаемый процесс, или остановлен отладчиком. Если точки останова объявлены в редакторе Cach´e Studio, то по заверше­нию процесса и старте нового все они будут применены также к новому процессу и не будут утрачены с локальными переменными завершивше­гося процесса.
Старшие версии Cach´e Debugger могут использовать для установки точек останова не только рутины типа INT, но и рутины препроцессора типа MAC, и корректно относиться к строкам, которые после препро­цессирования не присутствуют в получаемой INT рутине.
Для добавления в список выражений для просмотра их значений надо включить показ окна Watch, и переместить путем Drag-n-Drop фрагмент текста в список окна Watch. Этот фрагмент текста впоследствии можно отредактировать.
Отладчик Cach´e Debugger работает в режиме пошагового прохожде­ния по отдельной команде, или переходит либо на уровень стека ниже, либо на уровень стека выше.
По клавишным комбинациям отладчик Cach´e Debugger максимально приближен к продукту Microsoft Visual Studio.
Отладчик Cach´e Debugger всегда доступен разработчику при уста­новке клиентской части Cach´e под Windows и при работе с сервером Cach´e той же версии. Сервер Cach´e при этом может работать под любой поддерживаемой Cach´e операционной системой.

5.9 Serenji Debugger

Serenji Debugger - это самостоятельный коммерческий продукт, появив­шийся много лет назад, и работающий с различными MUMPS система­ми. На момент написания книги он поддерживает следующие MUMPS системы:
1. Cach´e 4.0 или старше
2. GT.M 4.3-000 или старше
3. DSM 7.1 или старше
4. M21 2.14 или старше
5.9. SERENJI DEBUGGER 407
5. MSM 4.4 или старше
Кроме функций отладчика этот продукт является также полноцен­ным GUI редактором исходного кода с подсветкой синтаксиса и может работать с поддерживаемыми MUMPS системами как локально, так и удаленно по TCP/IP.
К возможностям отладчика Serenji Debugger относится возможность отладки самых различных типов процессов, это могут быть терминаль­ные процессы, фоновые процессы, а также процессы, обслуживающие WEB страницы ZEN, CSP и WebLink в Cach´e, MSM-Activate в MSM, и приложения Visual M.
Клиентская часть Serenji Debugger выполнена в виде стандартного многооконного Windows приложения и работает на множестве операци­онных систем Windows. В настоящее время продукт непрерывно развива­ется и совершенствуется, и часть ранних операционных систем Windows снята с поддержки из-за отказа Microsoft их далее официально поддер­живать.
По клавишным комбинациям отладчик Serenji Debugger максимально приближен к продукту Microsoft Visual Basic.
Отладчик поддерживает установку и снятие отладочной точки остано­ва, просмотр стека, локальных переменных, список установленных точек останова, и возможность ввода и исполнения команд в контексте оста­нова. При этом вывод исполняемых команд может быть показан в окне отладчика.
К функциям прохождения отлаживаемого процесса относятся функ­ции:
1. Step in
2. Step over
3. Step out
4. Run to cursor
5. Go
6. Fast forward
К интересной возможности отладчика относится возможность пере­ключения пошагового исполнения между режимами по каждой команде и по каждой строке команд.
Точки останова отладчика могут быть установлены с условиями:
408 ГЛАВА 5. ОБРАБОТКА ОШИБОК
1. Условие в виде выражения, при выполнении которого точка оста­нова приводит к останову и переключению в отладчик.
2. Отложенный останов на заданное число срабатываний, после кото­рого останов выполняется.
3. Точка останова на условие изменения данных.
4. Обычная точка останова, срабатывающая всегда.
5. Останов при переходе процесса в состояние ошибки.
6. Останов при начале выполнения процесса.
7. Однократный останов без запоминания точки останова (Run to cursor).
Точки останова могут быть установлены или сняты независимо от то­го, исполняется ли отлаживаемый процесс, или остановлен отладчиком, при этом нет ограничения на число установленных точек останова. Если точки останова объявлены в редакторе Serenji Debugger, то по заверше­нию процесса и старте нового все они будут применены также к новому процессу и не будут утрачены с локальными переменными завершивше­гося процесса.
Как уже было сказано, отладчик Serenji Debugger является активно развиваемым продуктом и его разработчики тщательно и очень внима­тельно относятся к выявляемым в продукте проблемам и к самым малей­шим нюансам совместимости с различными реализациями как MUMPS систем, так и операционных систем. Продукт выпускается независимо от производителей MUMPS систем, и с выходом новых их версий при необ­ходимости повторно адаптируется под возможные изменения в версиях MUMPS систем и операционных систем.
Глава 6

Внешний мир

6.1 Общие принципы

С самого начала в языке MUMPS присутствовали встроенные в язык команды ввода-вывода, команды открытия, закрытия и переключения устройств ввода-вывода. За многие годы развития компьютерных систем MUMPS системы применяли появлявшиеся новые технологии и способы взаимодействия программ в виде все тех же устройств ввода-вывода. При появлении в будущем других новых технологий взаимодействия они также могут быть использованы в MUMPS системах путем добавления еще одного типа устройства и, с большой долей вероятности, с полным сохранением общей модели ввода-вывода.
Как уже было описано в разделе команд ввода-вывода, в MUMPS системах основная модель ввода-вывода - это модель последовательных устройств. Устройство в зависимости от его физического типа и спосо­ба открытия может поддерживать запись (данные выходят за пределы процесса), чтение (данные поступают в процесс) или и чтение и запись.
При и чтении и записи устройство производит автоматическое пози­ционирование в потоке на длину прочитанных или записанных данных. В отдельных специальных случаях так называемых блочных устройств или при открытии устройства в блочном режиме чтение и запись приво­дят к чтению и записи одного блока. Размер одного блока задается либо типом устройства либо режимом его открытия. Вне зависимости от то­го, что устройство является последовательным, команде чтения строки можно указать длину последовательности, которую необходимо прочи­тать.
В отличие от обычных функций нижнего уровня распространенных языков программирования, команда чтения строки в MUMPS при ука-
409
410 ГЛАВА 6. ВНЕШНИЙ МИР
зании длины чтения действительно ожидает приема входных данных на всю указанную длину, а команда записи записывает всю указанную строку.
Что интересно, для команды чтения может быть указан таймаут ожи­дания, и команда вернет прочитанную последовательность либо если получена указанная длина, либо если истек таймаут. Таким образом, в MUMPS можно соединить пространство и время. Чтение с таймаутом используется, например, в интерактивном вводе в терминальных про­граммах - процесс время от времени читает что было нажато с указа­нием таймауа, и если не было нажатий то продолжает отображение или обработку данных, иначе переходит к обработке нажатой клавиши.
Кроме штатно поддерживаемых устройств ввода-вывода, для тех слу­чаев, когда нет способа организовать обмен данными последователь­но из-за физического принципа действия, например UDP/IP, или когда необходимо обращаться к устройству для чтения его параметров состо­яния, в MUMPS системах используются либо специальные системные функции, либо обращение к функциям во внешних подключаемых мо­дулях (DLL, SO), либо MUMPS система может предоставить тот же интерфейс через SSVN.
В модели устройств MUMPS инициатором обмена данными всегда выступает процесс MUMPS, переходя к чтению или записи данных. В случае если необходимо организовывать обмен данными по инициативе сторонней программы, нужно организовать процесс MUMPS так, чтобы он проверял, нет ли входных данных для обработки. Нужно учитывать, что в модели процессов MUMPS в настоящее время отсутствует мно­гопоточность в понимании выполнения нескольких последовательностей команд в рамках одного процесса или событийность с прерываниями.
Модель событий и асинхронной активации MUMPS процессов пред­лагалась и рассматривалась в комитете по стандартизации MDC, и ча­стично модель описана в стандарте как предложение к применению, но ни одна MUMPS система в действительности таких способов активации и выполнения не поддерживает.

6.2 Терминальный интерфейс

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