[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Работа с программой отладки dbx

В следующих разделах приведена информация о работе с программой отладки dbx.

Запуск программы отладки dbx

Программу dbx можно запустить с различными параметрами. Ниже перечислены три самых распространенных способа запуска dbx:

При запуске команда dbx пытается найти файл .dbxinit (Работа с файлом .dbxinit) в текущем каталоге или каталоге $HOME пользователя. Если файл .dbxinit существует, то в начале сеанса отладки выполняются команды из этого файла. Если файл .dbxinit есть и в домашнем, и в текущем каталоге, то оба файла считываются в указанном порядке. Поскольку файл .dbxinit в текущем каталоге считывается последним, его команды могут заменить команды из домашнего каталога.

Если имя объектного файла не указано, программа dbx запрашивает имя объектного файла для отладки. Имя файла по умолчанию - a.out. Если в текущем каталоге есть файл core или если указан параметр ФайлДампа, то программа dbx сообщает о том, в каком месте произошел сбой программы. До начала выполнения объектного файла можно просмотреть значения переменных, а также содержимое регистров и областей памяти, сохраненные в файле дампа. Начиная с этого момента, dbx начинает запрашивать команды.

Запуск команд оболочки из dbx

С помощью подкоманды sh можно запускать команды оболочки, не прерывая программу отладки.

Если команда в sh не указана, то будет выполнен временный выход в оболочку, а после завершения работы с ней управление будет возвращено программе dbx.

Редактор командной строки dbx

В командной строке dbx применяются функции редактирования, аналогичные функциям оболочки Korn. Режим vi предоставляет функции, схожие с редактором vi, а режим emacs - схожие с редактором emacs.

Для включения этих функций вызовите подкоманду dbx set -o или set edit. Для включения функций редактора vi введите подкоманду set edit vi или set -o vi.

Кроме того, выбрать режим редактирования можно с помощью переменной среды EDITOR.

Программа dbx записывает введенные команды в файл хронологии .dbxhistory. Если переменная среды DBXHISTFILE не установлена, то будет применяться файл хронологии $HOME/.dbxhistory.

По умолчанию команда dbx хранит 128 последних введенных команд. Для увеличения этого значения применяется переменная среды DBXHISTSIZE.

Управление выполнением программ

При работе с программой символьной отладки dbx вы можете добавлять в программу точки прерывания. После запуска программы dbx вы можете задать строки и адреса, которые будут выполнять роль точек прерывания, а затем запустить программу, отлаживаемую с помощью dbx. Когда программа дойдет до точки прерывания, ее выполнение будет приостановлено с выдачей соответствующего сообщения. После этого можно будет проверить состояние программы с помощью команд dbx.

Вместо применения точек прерывания можно выполнять программу по шагам, т.е. по одной инструкции или по одной строке за раз.

Установка и удаление точек прерывания

С помощью подкоманды stop задайте точки прерывания в программе dbx. Команда stop останавливает выполнение прикладной программы при выполнении определенных условий:

После вызова этих команд программа dbx будет отправлять сообщение с номером одного из событий, заданных в качестве точки прерывания.

Запуск программ

Подкоманда run предназначена для запуска программы. Эта команда указывает программе dbx, что необходимо запустить объектный файл. Аргументы в этом случае указываются так же, как и при запуске из командной строки. Формат подкоманды rerun совпадает с форматом run, за тем исключением, что если ей не передан список аргументов, то используются аргументы из предыдущего вызова. После запуска отлаживаемая программа выполняется до наступления любого из следующих событий:

В любом случае управление передается программе отладки dbx, которая показывает сообщение о причине остановки программы.

Продолжить выполнение остановленной программы можно с помощью следующих команд:

cont Продолжает выполнение программы с той точки, в которой оно было прервано.
detach Продолжает выполнение программы с той точки, в которой оно было прервано, при этом происходит выход из отладчика. Эта команда полезна в тех случаях, если вы исправили программу и хотите продолжить ее выполнение, но уже не в среде отладчика.
return Продолжает выполнение до тех пор, пока не произойдет возврат в Процедуру, или, если Процедура не указана, пока не завершится текущий процесс.
skip Продолжает выполнение программы до ее завершения или до перехода через точки прерывания указанное число + 1 раз.
step Выполняет одну строку исходного кода или указанное число строк.
next Выполняет программу до следующей строки исходного кода или выполняет указанное число строк исходного кода.

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

Изменить способ выполнения программы step можно с помощью переменной $stepignore. Более подробная информация приведена в описании команды dbx в книге AIX 5L Version 5.1 Commands Reference, Volume 2.

Остановкам в ходе пошагового выполнения программы не присваивается номер события, так как останов программы не связан ни с каким постоянным событием.

Если в программе есть несколько нитей, подкоманды cont, next, nexti и step обработают их правильно. Эти команды выполняются для конкретной нити, поэтому даже если другая нить обрабатывается командами cont, next, nexti или step, первая нить будет продолжать работать до тех пор, пока не встретит код, вызвавший прерывание.

Если вам нужно, чтобы перечисленные команды выполняли только текущую нить, можно установить переменную отладчика dbx с именем $hold_next; если эта переменная установлена, программа dbx во время выполнения команд cont, next, nexti и step приостанавливает обработку других нитей.

Примечание: При работе в таком режиме следует помнить, что приостановленная нить не может снять установленные ею блокировки; если при этом другая нить ожидает снятия одной из этих блокировок, выполнение программы может зайти в тупик.

Отделение вывода dbx от вывода программы

При отладке программ, работающих с экраном, например, текстовых редакторов и графических программ, следует применять команду screen. Эта команда открывает для программы dbx окно Xwindow. Отлаживаемая программа при этом продолжает выполняться в своем окне. Если не вызвана команда screen, то вывод программы dbx будет перемешан с выводом других программ.

Трассировка выполнения

Подкоманда trace указывает программе dbx, что необходимо напечатать информацию о состоянии отлаживаемой программы. Подкоманда trace может существенно замедлить выполнение программы, в зависимости от загруженности dbx. Существует пять вариантов трассировки:

Удаление событий трассировки происходит так же, как и удаление точек прерывания. При выполнении команды trace на экран выводится ИД соответствующего события, а также информация о внутреннем представлении этого события.

Связанная информация

Программа символьной отладки dbx - Обзор

Просмотр и редактирование исходного файла с помощью программы отладки dbx

Проверка программных данных

Применение dbx для отладки на машинном уровне

Настройка среды отладки dbx


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]