В следующих разделах приведена информация о работе с программой отладки dbx.
Программу dbx можно запустить с различными параметрами. Ниже перечислены три самых распространенных способа запуска dbx:
При запуске команда dbx пытается найти файл .dbxinit (Работа с файлом .dbxinit) в текущем каталоге или каталоге $HOME пользователя. Если файл .dbxinit существует, то в начале сеанса отладки выполняются команды из этого файла. Если файл .dbxinit есть и в домашнем, и в текущем каталоге, то оба файла считываются в указанном порядке. Поскольку файл .dbxinit в текущем каталоге считывается последним, его команды могут заменить команды из домашнего каталога.
Если имя объектного файла не указано, программа dbx запрашивает имя объектного файла для отладки. Имя файла по умолчанию - a.out. Если в текущем каталоге есть файл core или если указан параметр ФайлДампа, то программа dbx сообщает о том, в каком месте произошел сбой программы. До начала выполнения объектного файла можно просмотреть значения переменных, а также содержимое регистров и областей памяти, сохраненные в файле дампа. Начиная с этого момента, dbx начинает запрашивать команды.
С помощью подкоманды sh можно запускать команды оболочки, не прерывая программу отладки.
Если команда в sh не указана, то будет выполнен временный выход в оболочку, а после завершения работы с ней управление будет возвращено программе 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 игнорирует это условие, если задана переменная отладки $ignoreload. По умолчанию эта переменная задана. Более подробная информация приведена в описании команды set.
В любом случае управление передается программе отладки 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 приостанавливает обработку других нитей.
Примечание: При работе в таком режиме следует помнить, что приостановленная нить не может снять установленные ею блокировки; если при этом другая нить ожидает снятия одной из этих блокировок, выполнение программы может зайти в тупик.
При отладке программ, работающих с экраном, например, текстовых редакторов и графических программ, следует применять команду screen. Эта команда открывает для программы dbx окно Xwindow. Отлаживаемая программа при этом продолжает выполняться в своем окне. Если не вызвана команда screen, то вывод программы dbx будет перемешан с выводом других программ.
Подкоманда trace указывает программе dbx, что необходимо напечатать информацию о состоянии отлаживаемой программы. Подкоманда trace может существенно замедлить выполнение программы, в зависимости от загруженности dbx. Существует пять вариантов трассировки:
Удаление событий трассировки происходит так же, как и удаление точек прерывания. При выполнении команды trace на экран выводится ИД соответствующего события, а также информация о внутреннем представлении этого события.
Программа символьной отладки dbx - Обзор
Просмотр и редактирование исходного файла с помощью программы отладки dbx
Применение dbx для отладки на машинном уровне