CXdb - отладчик, ориентированный на
языки программирования C и FORTRAN.
Дает возможность отлаживать программы, в том числе и предварительно
оптимизированные, но не более чем до -03 уровня.
Может работать в алфавитно-цифровом режиме - на терминалах типа
VT100, и в графическом режиме - на X терминале.
Для того, чтобы можно было работать с отладчиком CXdb,
предварительно программу
необходимо транслировать с опцией -cxdb.
Кроме исполняемого файла, в текущей директории будет создана
поддиректория с файлами, необходимыми для работы отладчика -
так называемыми CDI файлами
Вариант командных строк с подсоединением библиотек и
запуском отладчика:
f77 -g file.f -o file.out | для SPP-2000 |
cxdb file.out | запуск самого отладчика |
(CXdb)
Отладчик CXdb - система многооконная:
Command window, Source window,
Переход от окна к окну происходит с помощью комбинации клавиш
Esc+N, или щелчком мышки - в графическом режиме.
Для того, чтобы открыть окно Help, достаточно после подсказки
набрать команду help:
(CXdb)help
Система может подсказать правильный формат команды
в том же окне Command в случае, если она будет набрана неверно.
После запуска программы на счет открывается окно
Отлаживать программу можно и с самых первых ее строк, и, если
есть необходимость - перейти сразу к ее
логическим частям, так называемым source units.
На каждом уровне
можно сделать прерывание или перейти в шаговый режим,
просматривая в окне Command значения переменных, аргументов,
регистров и содержимое памяти.
При вызове отладчика
первыми выполняются файлы инициализации (если только не
используется опция -nx). Затем опции
в командной строке выполняются в том порядке, в каком они появляются.
Таким образом, существует несколько вариантов запуска
отладчика: с набором опций, и без опций.
Отладчик в своем списке имеет порядка 200 команд и их
разновидностей.
Этот набор команд c краткими описаниями можно просмотреть в окне Help,
набрав в окне Command команду:
(CXdb)help команда
Но для начала исследования программы вполне достаточно использовать только часть всего набора команд. Несколько основных команд, которые наверняка потребуются в любом сеансе работы с отладчиком:
(CXdb)run | - создание нового процесса и его выполнение; |
(CXdb)rerun | - создание и выполнение нового процесса с использованием предыдущего списка аргументов; |
(CXdb)con | - продолжение выполнения процесса; |
(CXdb)print X | - печать значений переменных X во время счета; |
(CXdb)kill process | - прекращение выполнения процесса; |
(CXdb)quit | - завершение работы с отладчиком; |
(CXdb)help NN, |
где NN - номер ошибки, выданный отладчиком в окне Command после некорректной операции. |
(CXdb)set step размер шага - выбор размера шага;
(CXdb)step 4 - переход на 4 установленных шага;
(CXdb)step loop - переход на 1 цикл.
Если нет необходимости входить в подпрограммы, нужно использовать вместо команды step команду next с аналогичными параметрами:
(CXdb)next 5 - переход на 5 установленных шагов, игнорируя вызовы подпрограмм.
После каждого останова в шаговом режиме можно
оценить состояние процесса, его регистров, переменных, аргументов.
Форматы команд с их параметрами подробно описаны во внутренней системе
Help.
Следующая команда откроет окно Help
с определениями и примерами командных строк:
(CXdb)help info параметр
Информация о состоянии системы, значениях переменных, регистров и т.д. появляется в окне Command по команде:
(CXdb)info параметр ,
где параметр -
cx | - статус текущей CXdb сессии; |
pa (path) | - путь к альтернативным CDI директориям; |
en (environment) | - переменные окружения процесса; |
pr (process) | - статус контролируемого отладчиком процесса; |
sy (symbols) | - список всех символов программы, включая подпрограммы, локальные и глобальные перемененные, их типы, размеры массивов; |
bi (bind) | - список значений "горячих" клавиш; |
ar (args) | - аргументы текущей программы (имя, тип, текущее значение, или, если это массив, количество элементов и начальный адрес); |
lo (locals) | - список типов и значений локальных переменных; |
li (line) | - таблица с идентифицирующими (Id) номерами, т.е порядковыми номерами source units; |
expression X | - информация о выражении или переменной X из текущего процесса (адрес, значение, тип). |
(CXdb)info psw | - слово состояния программы; |
(CXdb)info registers | - скалярные и адресные регистры; |
(CXdb)info stack | - стек процесса; |
(CXdb)info vregisters | - векторные регистры. |
(CXdb)examine начальный адрес
Для определения начального адреса можно воспользоваться или командой info, или встроенной функцией Фортрана loc в самой командной строке:
(CXdb)examine/bd loc(ARRAY):8
По приведенной выше команде на экран выводится 8 байт памяти (b), начиная с первой ячейки массива ARRAY в десятичном (d) формате.
Таким образом, можно вывести необходимое количество ячеек памяти ( 20 -
по умолчанию) в удобном формате адреса и удобном представлении единицы
памяти.
Подробно эта команда описана в Help - системе:
(CXdb)help examine
Полезной может оказаться команда goto, предназначенная для перемещения по программе:
(CXdb)goto address значение адреса
(CXdb)goto line номер строки
(CXdb)goto source имя / номер
Останавливать выполнение программы можно и с помощью точек прерывания. Установка точек делается либо заранее, до запуска программы, которая уже находится под контролем отладчика, или после останова работающей программы, когда проблема может уже в какой-то степени проясниться, т.к. отладчик выявляет подсветкой строку, выдающую сигнал об ошибке. Выставляются точки прерывания на строках, адресах, и source units программы, которые здесь также становятся параметрами в командах. Отладчик CXdb предоставляет несколько видов точек прерывания:
eventpoint | - прерывание по событию без привязки к конкретному адресу; |
breakpoint | - остановка процесса в указанной точке; |
tracepoint | - слежение за выполнением процесса без остановки процесса; |
watchpoint | - остановка процесса в случае изменения содержимого указанной области памяти (асинхронные точки прерывания). |
(CXdb)break instruction имя | - на начальный адрес указанной команды; |
(CXdb)break line номер | - на строку с указанным номером; |
(CXdb)break routine имя | - на первый выполняемый source unit (обычно это первое выражение в программе после описания локальных переменных); |
(CXdb)break source номер | - на адрес source unit по его порядковому (Id) номеру в программе. |
Каждая установленная точка прерывания имеет свой порядковый номер, по которому можно к ней обращаться. Этот номер появится на экране в сообщениии самого отладчика в окне Command при установке или достижении этой точки, или после запроса info event в списке всех выставленных прерываний. Над расставленными точками прерывания можно производить следующие действия:
блокировать, запрещать системе на них реагировать: | |
(CXdb)disable event номер | |
(CXdb)disable eventtype вид прерывания | |
снимать запрет: | |
(CXdb)enable event номер | |
(CXdb)enable eventtype вид прерывания | |
стирать, уничтожать: | |
(CXdb)remove event номер | |
(CXdb)remove eventtype вид прерывания | |
В этих командах в качестве параметра кроме порядкового номера точки прерывания или ее типа - break, trace, watch . . ., можно использовать знак (*) - запрос на все существующие в программе точки прерывания. |
(CXdb)set ignor N1 N2
включает счетчик для точки прерывания с номером N2.
Останов на этой точке произойдет при N1-м проходе через
нее.
В Source window строки программы с точками прерывания
выделяются цветом, подсветкой и маркером у номера строки.
При задании прерывания есть возможность ввести определенный
набор действий - обработку прерывания - eventpoint handler.
Один и тот же адрес в программе можно отметить несколькими
точками прерывания, которые могут быть различных типов.
Чтобы получить список всех установленных точек прерывания
вместе с наглядной картиной их размещения в программе, нужно
воспользоваться командой:
(CXdb)info event - вывод текста программы в окне Source cо всеми отмеченными прерываниями;
(CXdb)info trace (watch, break) - вывод текста программы с прерываниями указанного типа - trace (watch, break).
Во время работы с отладчиком в алфавитно цифровом режиме удобно пользоваться клавишами:
Esc+N | - перейти от окна к окну; |
Esc+K | - закрыть текущее окно; |
Esc+O | - перейти к нижнему окну; |
Ctrl+P | - выставить предыдущую команду в окне Command после подсказки. |
(CXdb) quit
-a process-id | - подсоединяет CXdb к процессу с указанным номером. Если в командной строке не указан выполняемый файл (с использованием -e опции), то по опции -a порождается команда отладчика debug proc. Если в командной строке указан выполняемый файл, то опция -a вызывает команду отладчика attach (прикрепить); |
-c file-name | - указывает core файл для отладки. Если в командной строке не указан выполняемый файл (при использовании опции -e), то эта опция порождает команду отладчика debug core. Если выполняемый файл указан, то эта опция порождает команду отладчика core. Опции -c и -a вместе не используются. |
-cw geometry | - размеры командного окна в графическом режиме (для Windows). С форматами для задания размеров можно познакомиться с помощью внутренней Help-системы отладчика; |
-D directory-specifier | - добавляет директорию в путь поиска. Разделитель
в списке директорий - запятая. В командной строке можно
использовать -D опцию несколько раз. Эта опция
порождает команду отладчика |
-e file-name | - указывает выполняемый файл для отладки. Выполняется команда отладчика debug exec. Опция -e необязательна. Если она пропущена, то CXdb примет первый file-name за выполняемый; |
-F | - дает возможность установить планировщик,
если процесс требует одновременного
использования всех процессоров данной машины.
Эта опция выполняет команду отладчика |
-f file-name | выполняет указанный командный файл сразу после обязательной инициализации. Опция представляет собой команду отладчика source. В командной строке опция может быть использована несколько раз; |
-fw geometry | - размеры для окна Display File window; |
-hw geometry | - размеры для окна Help; |
-l | - запуск отладчика в строчном режиме (line mode). Здесь
можно использовать команды отладчика вместе с
UNIX command line editing.
В строчном режиме отображение команд блокируется, т.к.
первой выполняется команда отладчика
clear echo, далее - идет выполнение всех файлов инициализации, затем - появляется подсказка (CXdb) : отладчик ожидает ввода дополнительных команд. В этом режиме вывод идет в стандартные потоки вывода stdout и диагностики stderr. Можно использовать shell redirection для переадресации стандартного ввода/вывода; |
-ns | - блокирует автоматическое создание окна Source; |
-nw | - переводит отладчик в графический режим, как если бы он был запущен под Windows. Появляется возможность использовать X-терминал. При работе на алфавитно-цифровых терминалах эта опция не используется; |
-nx | - запрет на выполнениe файлов инициализации; |
-pw geometry | - размеры для окна Process Interface; |
-sw geometry | - размеры для окна Source; |
-x command-list | - при запуске выполняется список команд в порядке, который в командной строке указан опциями -x и -f. Разделитель в списке - (;).В одной строке опцию -x можно использовать несколько раз; |
-X toolkit options | - используются опции графического режима. Для полной инфориации обращаться к XWindows документации. |
$ cxdb
Эта команда вызывает
CXdb без опций. Выполняются все найденные
файлы инициализации. Открывается окно Command .
$ cxdb a.out
Команда вызывает CXdb. Имя файла рассматривается как
выполняемый файл, а CXdb исполняет команду
debug exec.
$ cxdb -c core
Вызывается CXdb, который в свою очередь порождает команду
debug core. Используются только данные, найденные в
core файле.
$ cxdb a.out core
Первый файл рассматривается как выполняемый. Второй -
файл core. Будет использован и выполняемый файл и
его образ (image), найденный в core файле.
$ cxdb -a 26435
Вызывается отладчик, порождающий команду debug proc, т.к.
выполняемый файл не указан. Отладчик подсоединяется к процессу
с номером pid - 26435. Выполняемого файла отладчик еще не имеет.
$ cxdb -a 26435 -e a.out
Эта команда активизирует CXdb. Опция -a
порождает команду отладчика attach для подсоединения
отладчика к процессу 26435. Опция -e указывает
a.out как выполняемый файл.
$ cxdb -x "alias l 'step loop'; alias r 'step routine'"
Вызывается CXdb. Появляется командное окно.
Выполняются команды alias(строка в " ").
При ошибке в программе в результате ее выполнения может сформироваться файл с именем core, в который записывается состояние программы (программный код и данные) на момент ее аварийного завершения. Core может иметь очень большой размер. Если нет цели использовать содержимое core-файла в работе с отладчиком, то можно ограничить предельный размер файла до начала выполнения задания:
limit coredumpsize 100Kbytes