СИМВОЛИЧЕСКИЙ ОТЛАДЧИК CXdb


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, Process Interface window, Help window, Display File window - окна как для графического, так и для алфавитно-цифрового режима . Disassembly window, Examine window, Stack window - окна, доступные только в графическом режиме. После вызова отладчика с указанным выполняемым файлом на экране появляются два окна: Command window - для ввода команд и сообщений отладчика, и Source window, где содержится исходный текст программы.
Переход от окна к окну происходит с помощью комбинации клавиш Esc+N, или щелчком мышки - в графическом режиме. Для того, чтобы открыть окно Help, достаточно после подсказки набрать команду help:

(CXdb)help

Система может подсказать правильный формат команды в том же окне Command в случае, если она будет набрана неверно. После запуска программы на счет открывается окно Process Interface с результатами вычислений.
Отлаживать программу можно и с самых первых ее строк, и, если есть необходимость - перейти сразу к ее логическим частям, так называемым 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 после некорректной операции.
В случае семантической ошибки выполнение программы может прекратиться с сообщением о переполнении разрядной сетки в определенной ячейке памяти. Отладчик отметит подсветкой конфликтную строку в исходном тексте в окне Source и сообщением в окне Command. Процесс может быть и не остановлен, но результаты окажутся совершенно неверными.
Выявить ошибку в программе может помочь переход в шаговый режим. Но предварительно процесс должен быть запущен командой отладчика run, например. К шаговому режиму можно переходить только когда процесс находится в состонии running.
Отладчик предоставляет возможность предварительно выбрать размер шага, равный какой-то логической части программы (source units). Это могут быть routine, blok, loop, statement (по умолчанию), expression, которые в системе символьного отладчика представляют собой параметры некоторых команд. В команде step - это размер шага:

   (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) номеру в программе.
Следует различать номер source unit и номер строки. На одной строке может оказаться несколько таких units, т.е. цикл и несколько выражений, например. Возможна ситуация, когда на строке не окажется ни одного source unit: строка с описанием переменных.

Каждая установленная точка прерывания имеет свой порядковый номер, по которому можно к ней обращаться. Этот номер появится на экране в сообщениии самого отладчика в окне 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 опцию несколько раз. Эта опция порождает команду отладчика add default path;
-e file-name - указывает выполняемый файл для отладки. Выполняется команда отладчика debug exec. Опция -e необязательна. Если она пропущена, то CXdb примет первый file-name за выполняемый;
-F - дает возможность установить планировщик, если процесс требует одновременного использования всех процессоров данной машины. Эта опция выполняет команду отладчика set default fixed sсhed (для отладки multi-threaded процессов). Если на fixed scheduling нет запрета, то процесс не начнет выполнятся до тех пор, пока не станут доступны все процессоры. Если fixed scheduling заблокирован, то процесс будет выполняться на любом процессоре, доступном в данный момент времени. Последнее условие отладчик принимает по умолчанию;
-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 документации.

вернуться назад


  

ПРИМЕРЫ
запуска программы под контролем символического отладчика

  $ f77 -g file.f -o file.out
Создается исполняемый файл file.out, и в текущей директории - поддиректория /.CXdb с CDI- файлами, которые будут использоваться отладчиком.

  $ 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 может иметь очень большой размер. Если нет цели использовать содержимое core-файла в работе с отладчиком, то можно ограничить предельный размер файла до начала выполнения задания:

limit coredumpsize 100Kbytes


вернуться назад


Compiler-Debugger Interface (CDI)

Каждый раз, когда программа транслируется с опцией -cxdb, транслятор создает CDI-файлы с данными, которые потом используются самим отладчиком. Это связь между отладчиком CXdb и компиляторами FORTRAN или C. CDI интерпретирует информацию, сгенерированную компилятором, и переводит ее в форму, которую может понять и использовать отладчик. CDI располагает эти файлы в поддиректории с именем /.CXdb, которая создается в текущей директории. Если такие CDI файлы с данными перенесены из своей родной директории, то для работы CXdb необходимо указать новый путь, воспользовавшись командой отладчика dirpath.
Создается несколько небольших по объему файлов с промежуточными данными. Файлы имеют такие же имена, как имя исходного файла с различными расширениями.
CDI сжимает все файлы, которые порождает. По грубой оценке, все файлы с данными занимают примерно в 2-4 раза меньше, чем аналогичный сore file.
Предупреждение.
При использовании shell команд strip или ld -s для уменьшения размеров выполняемого файла происходит уничтожение некоторых данных, без которых отладчик CXdb работать не может. Потеря файлов в директории /.CXdb тоже препятствует работе отладчика.

вернуться назад


   И.К. Некрасова
   Телефон: 63635, к 516,
   E-mail: ira@jinr.ru