Самый простой способ отладки - это в тексте программы в нужных местах поставить примерно вот такие вызовы:
OUTLOG(__FILE__,__LINE__, var1,var2,....,varn)и, после выполнения программы, проанализировать содержимое *.log файла. Это помогает, когда ни один из ниже перечисленных отладчиков не помогает.
clip_dbg - отладчик в стиле gdb (gnu debug) умеет тоже, что и остальные отладчики, только сервиса предоставляет ровно столько, сколько может предоставить командная строка без "человеческого" интерфейса.
Чтобы начать отладку при помощи clip_dbg, надо основную программу запустить с ключиком --debug (или --stop для ожидания команды "старт" от отладчика) и с другой консоли запустить clip_dbg <Номер_отлаживаемого_процесса>. Далее для изучения в clip_dbg есть команда help или help <суб_команда>.
Особое внимание на этом отладчике заострять не хочется, но все же его надо иметь ввиду, так как это очень простая программа имеющая минимум "наведенных" глюков. И когда возникает вопрос "глючит программа или отладчик ?" лучше пользоваться этим отладчиком чем более навороченным и приятным :).
clip_cld - отладчик программ, предназначен для интерактивного контроля (пошагового ) выполнения программ и просмотр текущих состояний переменных. Выполнен в стиле стандартного CLD из поставки CA-Clipper.
Основное свойство отладчика - выполнять команды по управлению отлаживаемой программы. Команды можно задавать через меню, набирать их в окне "Команды" или запускать "скрипты" из файла.
! Кто привык пользоваться опцией "Монитор", ищите его в пункте меню "View | Смотреть" - этот монитор существенно изменился.
Script-файлы содержат команды в той форме, в которой они вводятся в окне команд. По умолчанию эти файлы имеют расширение CLD.
Скрипт-файлы можно создавать обычным текстовым редактором. Считается что одна строка в таком файле - одна команда.
Запуск скрипта производится командой INPUT (УПРАВЛЕНИЕ) "имя_файла" или сокращенно I (У) "имя_файла". Задать стартовый скрипт можно при запуске отладчика указанием имени файла в системной командной строке - clip_cld @cript_file.cld. Скрипт с именем init.cld, находящийся в текущем каталоге, будет вызван и исполнен автоматически.
Команды могут описываться как на английском языке, так и на русском, и для каждой команды есть сокращенный эквивалент.
Формат команды | Эквиваленты | Описание команды |
---|---|---|
connect | co | Производит подключение к отлаживаемой программе |
? <выражение> | ?? | Выводит результат выражения или переменной |
! <имя_переменной> | !! | Выводит значение переменной, в том числе и объявленной как local |
animate | анимация,A,А | Запускает программу в режиме анимации |
BREAKPOINT номер_строки [имя_файла] | B,BP,ТО | Устанавливает точку останова на строке в файле. |
CALLSTACK ON|OFF | C,ВЫЗОВ | Включает или выключает окно стека вызовов |
DELETE ALL BP|TP|WP | D, УДАЛИТЬ | Удаляет все точки останова или трассировки или просмотра |
DELETE BP|TP|WP номер_точки | D, УДАЛИТЬ | Удаляет указанную точку останова или трассировки или просмотра |
DOS | OS | Вызывает операционную систему |
FIND [искомая_строка] | F,ПОИСК | Осуществляет в окне редактора поиск указанной строки или запускает диалог для указания параметров поиска |
GO | ПУСК | Запускает отлаживаемую программу "без остановок" |
GOTO [номер_строки] | G, ПЕРЕХОД | Переводит курсор в окне редактора на указанную строку или запускает диалог для точного указания параметров перехода. |
HELP | H,ПОМОЩЬ | Вызывает окно помощи,скорее всего это будет вот этот самый текст. |
INPUT имя_файла.cld | I,УПРАВЛЕНИЕ | Выполняет указанный скрипт-файл с командами. |
LIST BP|TP|WP | L,СПИСОК | Выводит список точек останова, трассировки, просмотра |
NEXT | N,СЛЕДУЮЩЕЕ | Продолжает поиск по последним введенным правилам |
NUM ON|OFF | НУМЕРАЦИЯ | Включает или отключает режим нумерации строк в окне редактора. |
OUTPUT | O,ЭКРАН | Показывает экран отслеживаемой программы |
PREV | P,ПРЕДЫДУЩЕЕ | Производит поиск в обратную сторону в окне редактора |
QUIT | Q,КОНЕЦ | Закончить процесс отладки |
RESTART | R,РЕСТАРТ | Перезапускает отлаживаемую программу |
RESUME | ИСХОДНОЕ | Данная команда не поддерживается, так как отладчик может одновременно открывать несколько окон редакторов и позволяет между ними переключатся. Но и считать эту команду ошибочной отладчик не будет |
SPEED задержка | СКОРОСТЬ | Устанавливает скорость анимации в десятых долях секунды и определяет паузу между выполняемыми операторами |
STEP | S,ШАГ | Выполняет одну строку отлаживаемой программы |
TP выражение | T,ТТ,TRACEPOINT | Устанавливает точку трассировки для "выражение". "Выражение" может быть просто именем переменной. |
VIEW [имя_файла] | V,ЗАГРУЗИТЬ | Загружает файл в новое окно редактора, или вызывает диалог для выбора файла. |
WP выражение | W,ТЗ,VIEWPOINT | Добавляет "выражение" в окно просмотра |
CONNECT имя_процесса | номер_процесса | CO | Подключится к процессу |
# | *,rem | Комментарий в скрипт-файле |
В каждый момент активно только одно окно, выделенное рамкой повышенной яркости. Назначение/переключение активного окна производится клавишами Tab или Shift+Tab.
У каждого окна в правом верхнем углу указан его номер, по которому можно быстро переключатся при помощи клавиш Alt+1,Alt+2,...Alt+n по номеру окна. Указанные клавиши работают только в режиме скан-клавиатуры. Если используется режим ANSI-терминала, то должны работать клавиши Ctrl+Enter+1, ....
Пункт меню "окна" содержит команды по управлению размерами и количеством окон на экране.
К сожалению произвольное управление размерами окон на сегодня не реализовано, так как стандартные функции по управлению окнами из библиотеки CA-Tools этого не позволяют.
Все клавиши, описанные в данном документе - это те которые установлены по-умолчанию и описаны в файле из дистрибутива tools/hotkeys.prg. Для удобства пользователей все клавиши можно переназначить аналогично как и в tools/hotkeys.prg. Достаточно создать файл $HOME/.clip/keymaps.prg, описать в нем горячие клавиши и соответсвующие им команды, скомпилировать этот файл с ключиком -p. Более подробно о назначении горячих клавиш читайте (пока нет места где об этом можно почитать - лучше загляните в tools/hotkeys.prg и вы все поймете).