mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      SDB(1)                                                   SDB(1)

      НАЗВАНИЕ
              sdb - символьный отладчик

      СИНТАКСИС
	    sdb  [-W] [-w] [об ектный_файл [образ_памяти [список_каталогов]]]

      ОПИСАНИЕ
              По команде sdb запускается символьный  отладчик,  пред-
              назначенный для отладки программ на языках C и  Фортран
              77. Его можно использовать для анализа об ектных файлов
              и образа памяти, а также для  выполнения  программ  под
              управлением пользователя.

              Об ектный_файл - это файл с выполняемой программой, от-
              компилированной с опцией -g (отладка). Если она не была
              компилирована с опцией -g, возможности  символьной  от-
              ладки ограничиваются, но об ектный_файл можно  анализи-
              ровать, равно как можно отлаживаться на уровне машинных
              команд и процедур. По умолчанию об ектный_файл - a.out.

              Образ_памяти - это файл с  образом  памяти,  полученный
              после завершения выполнения об ектного_файла. По  умол-
              чанию имя образа_памяти есть core. Образ_памяти не обя-
              зан присутствовать; знак - на его месте ведет к игнори-
              рованию образа.

              Список_каталогов, в котором отдельные каталоги разделе-
              ны двоеточием, используется для поиска файлов с  исход-
              ными текстами отлаживаемой программы.

              Команда sdb обрабатывает следующие опции:

              -W   Если файлы с исходными  текстами  отсутствуют  или
                   оказываются новее,  чем  об ектный_файл,  выдается
                   предупреждение. Опция -W подавляет проверку и, со-
                   ответственно, выдачу предупреждения.

              -w   Разрешение изменять об ектный_файл и образ_памяти.

              В каждый момент времени определены текущая строка и те-
              кущий файл. Если образ_памяти существует и не игнориру-
              ется, то первоначально  текущими  становятся  строка  и
              файл с исходным текстом, содержащим последний выполняв-
              шийся оператор. Если образа_памяти нет, текущими стано-
              вятся первая строка процедуры  main  и  соответствующий
              файл. Текущую строку и текущий файл можно изменить пос-
              редством команд анализа содержимого исходных файлов.

              При отладке имена переменных пишутся точно так же,  как
              в языках C или Фортран 77. Доступ к переменным, локаль-
              ным для некоторой процедуры, осуществляется посредством
              конструкции процедура:переменная. Если имя процедуры не
              указано,  используется  процедура,  содержащая  текущую
              строку. Можно ссылаться на  элемент  структуры  как  на
              структура.элемент; или, посредством указателей, как  на
              указатель->элемент; ссылка на элемент массива  выглядит
              как массив[номер]. Переход от  указателя  к  указуемому
              об екту записывается как указатель[0]. Допускаются ком-
              бинации этих конструкций. Доступ к переменным из  общих
              блоков Фортрана осуществляется аналогично  обращению  к
              элементам структур с заменой имени структуры на имя об-
              щего блока. Переменные из непоименованного общего блока
              записываются в виде .переменная.

              Можно также указывать переменную, задав ее  адрес.  До-
              пускается использование всех видов целых констант, при-
              нятых в языке C, так что адреса могут задаваться в  де-
              сятичном, восьмеричном и шестнадцатеричном виде.

              Если адрес указан на месте имени  структурной  перемен-
              ной, то шаблоном структуры будет  шаблон  последней  из
              структур, к которой выполнялся доступ посредством  sdb.
              Вообще, sdb рассматривает структуру как набор  перемен-
              ных; при указании имени структуры выводятся все ее эле-
              менты. Исключение составляет вывод  адресов:  выводится
              адрес начала структуры, а не отдельных ее элементов.

              Элементы  многомерных  массивов  записываются  в   виде
              массив[номер][номер]...,  или  массив[номер,номер,...].
              На месте номера может употребляться  также  конструкция
              номер;номер, задающая диапазон изменения индекса  ("вы-
              резку" из массива); * обозначает весь допустимый диапа-
              зон данного индекса. Если символы * являются последними
              в списке индексов, их можно опустить. При выдаче  адре-
              сов, как и в случае структур,  сообщается  адрес  всего
              массива или вырезки, но не адрес каждого из  элементов.
              Многомерные  массивы-аргументы  подпрограмм  на   языке
              Фортран 77 не могут быть выведены как массивы, так  как
              они являются указателями, значения которых есть  адреса
              массивов. Сам массив может быть получен в символическом
              виде из вызывающей функции. Кроме того, следует  учиты-
              вать, что sdb отсчитывает индексы от нуля.

              Ссылка на конкретный экземпляр переменной из стека  де-
              лается в виде процедура:переменная,номер. При этом  мо-
              гут использоваться все описанные ранее способы  доступа
              к элементам структур и массивов. Номер - это номер  по-
              явления процедуры в стеке, считая ближайший  к  вершине
              экземпляр первым. Если процедура не указана,  использу-
              ется та, что выполняется в данный момент.

              Номера строк в исходном тексте задаются в виде имя_фай-
              ла:номер или процедура:номер.  В  обоих  случаях  номер
              отсчитывается от начала файла. По умолчанию использует-
              ся текущий файл. Если не указан номер  строки,  то  ис-
              пользуется первая строка файла или процедуры.

              Можно оперировать не только со строками исходного текс-
              та, но и с адресами, используя конструкцию адрес:.

              Пока под управлением sdb выполняется процесс (см.  ниже
              команды r и k), все адреса относятся к  программе  про-
              цесса; в другие моменты они относятся к об ектному_фай-
              лу или образу_памяти.

         Адресация в файле
              Отладчик sdb позволяет работать с двумя файлами -  об -
              ектным и образом памяти. При этом адрес_в_файле получа-
              ется из указанного пользователем  адреса с помощью ото-
              бражения, ассоциированного с  каждым  из  двух  файлов.
              Отображение задается двумя тройками (b1, e1, f1) и (b2,
              e2, f2). Адрес_в_файле вычисляется следующим образом:

                   если b1 <= адрес < e1 то
                     адрес_в_файле = адрес + f1 - b1
                   иначе если b2 <= адрес < e2 то
                     адрес_в_файле = адрес + f2 - b2
                   иначе адрес некорректен

              Изначально оба отображения  настроены  на  файлы  типов
              a.out(4) и core(4) соответственно. Если  какой-либо  из
              указанных в командной строке файлов имеет  неподходящий
              тип, b1 и f1 устанавливаются равными 0,  e1  полагается
              равным максимально допустимому размеру файлов; тем  са-
              мым можно обращаться к произвольному  месту  файла  без
              преобразования адреса.

              Для того, чтобы sdb мог работать  с  большими  файлами,
              элементы троек хранятся как 32-разрядные целые числа со
              знаком.

         Команды
           Команды для просмотра данных
              t    Вывести стек вызовов завершившейся или остановлен-
                   ной программы.

              T    Вывести вершину стека вызовов.

              переменная/clm
                   Вывести значение переменной с  учетом  длины  l  и
                   формата m. Число c - счетчик, означающий, что  со-
                   держимое области памяти,  начинающейся  по  адресу
                   указанной переменной, будет выведено как  c  пере-
                   менных заданного типа. Спецификаторы длины:
                      b    Один байт.
                      h    Два байта (полуслово).
                      l    Четыре байта (слово).
                   Спецификаторы формата:
                      c    Символ.
                      d    Десятичное целое.
                      u    Десятичное целое без знака.
                      o    Восьмеричное целое.
                      x    Шестнадцатеричное целое.
                      f    32-разрядное  вещественное число одинарной
                           точности.
                      g    64-разрядное  вещественное  число  двойной
                           точности.
                      s    Переменная  есть указатель на цепочку сим-
                           волов; выводятся символы этой цепочки.
                      a    Вывести цепочку символов, начиная с адреса
                           переменной; нельзя использовать с  регист-
                           ровыми переменными.
                      p    Указатель на процедуру.
                      i    Дизассемблировать машинную команду  и  вы-
                           вести указанные в ней адреса в числовом  и
                           символическом виде.
                      I    Дизассемблировать машинную команду  и  вы-
                           вести указанные в ней адреса только в чис-
                           ловом виде.
                   Спецификатор длины может использоваться  только  с
                   форматами c, d, u, o и x.  Любая  из  спецификаций
                   clm может быть опущена. Если опущены все  специфи-
                   кации, то sdb подбирает подходящую длину и  формат
                   в соответствии с типом  переменной.  Если  указана
                   спецификация m, то для вывода используется  задан-
                   ный формат. Задание спецификации l может  привести
                   к усечению выводимых данных. Счетчик c задает  ко-
                   личество единиц памяти, начиная от адреса перемен-
                   ной, которые надлежит вывести. Количество  байт  в
                   этой единице определяется  спецификатором  l  или,
                   если он не указан, размером указанной  переменной.
                   Если  счетчик  указан со спецификаторами формата s
                   или a, то он определяет количество выводимых  сим-
                   волов;  иначе  цепочка выводится до нулевого байта
                   или до 128  символов  включительно.  Последнюю  из
                   просматривавшихся переменных можно повторно вывес-
                   ти  командой  ./. Если просматривалась структурная
                   переменная, по команде ./ выводится только послед-
                   ний элемент структуры.

                   Метасимволы языка sh(1) * и ? могут использоваться
                   в шаблонах имен процедур и переменных. Таким обра-
                   зом в ограниченном виде  предоставляются  средства
                   сопоставления с шаблонами.  Если  не  указано  имя
                   процедуры, то шаблон сравнивается с глобальными  и
                   локальными для данной процедуры  именами  перемен-
                   ных; если имя процедуры задано - то только с  име-
                   нами ее локальных переменных. Для сравнения только
                   с именами глобальных переменных используйте  форму
                   :шаблон.

              номер_строки?lm
              переменная:?lm
                   Вывести содержимое области памяти, начинающейся  с
                   адреса, заданного  номером_строки  или  переменной
                   (именем процедуры), по формату lm. Формат по умол-
                   чанию - i.

              переменная=lm
              номер_строки=lm
              число=lm
                   Вывести адрес переменной, номера_строки или значе-
                   ние числа по  формату,  заданному  lm.  Формат  по
                   умолчанию - lx. Последний вариант команды  исполь-
                   зуется для перевода чисел из одной системы счисле-
                   ния в другую.

              переменная!значение
                   Присвоить  переменной указанное значение. Значение
                   может быть числом, символьной константой или пере-
                   менной. Значение должно быть  определено;  выраже-
                   ния, результатом которых является несколько значе-
                   ний  (например, структуры) недопустимы. Символьные
                   константы записываются в виде 'символ. Числа расс-
                   матриваются как целые; только если есть десятичная
                   точка или показатель степени, число рассматривает-
                   ся как  вещественное  двойной  точности.  Регистры
                   рассматриваются  как  целые. Переменная может быть
                   выражением, которое означает более чем одну  пере-
                   менную (например, имя массива или структуры). Если
                   указан адрес переменной, то считается, что эта пе-
                   ременная  имеет тип int. Если для присваивания не-
                   обходимо преобразование типов, используются согла-
                   шения языка C.

              x    Вывести содержимое машинных  регистров  и  текущую
                   машинную команду.

              X    Вывести текущую машинную команду.

           Команды для просмотра файлов с исходными текстами
              e процедура
              e имя_файла
              e каталог/
              e каталог имя_файла
                   Первые две формы команды об являют  текущим  файл,
                   содержащий процедуру или  называющийся  имя_файла.
                   Текущей строкой становится первая строка в указан-
                   ной процедуре или в файле. Исходный  файл  берется
                   из указанного каталога (по умолчанию  из  текущего
                   каталога). Последние две  формы  команды  изменяют
                   текущий каталог. По команде e без  аргументов  вы-
                   даются имена текущей процедуры и текущего файла.

              /регулярное_выражение/
                   Поиск строки, содержащей цепочку символов,  сопос-
                   тавляющуюся  с  регулярным_выражением   в   смысле
                   ed(1). Поиск выполняется в прямом направлении, на-
                   чиная с текущей строки.

              ?регулярное_выражение?
                   То же, что и предыдущая команда, только поиск  вы-
                   полняется в обратном направлении.

              p    Вывести текущую строку.

              z    Вывести текущую строку и следующие за ней 9 строк.
                   Текущей станет последняя выведенная строка.

              w    Окно. Вывести 10 строк вокруг текущей строки.

              номер
                   Сделать  текущей  строку с указанным номером и вы-
                   вести ее.

              число+
                   Продвинуться вперед на заданное число строк и  вы-
                   вести новую текущую строку.

              число-
                   Переместиться назад на заданное число строк и  вы-
                   вести новую текущую строку.

           Команды управления выполнением программы
              счетчик r аргументы
              счетчик R
                   Начать выполнение программы с заданными аргумента-
                   ми. Команда r без аргументов запускает программу с
                   предыдущим набором аргументов, а R - действительно
                   без аргументов. Аргументы, начинающиеся с < или >,
                   означают переназначение стандартного ввода или вы-
                   вода соответственно.  Если  счетчик  задан,  будет
                   проигнорировано (счетчик-1) точек прерывания.

              номер_строки c счетчик
              номер_строки C счетчик
                   Продолжить выполнение после точки  прерывания  или
                   настоящего прерывания. Если счетчик  задан,  будет
                   проигнорировано (счетчик-1) точек  прерывания.  По
                   команде C выполнение будет продолжено с  возбужде-
                   ния сигнала, вызвавшего приостановку программы,  а
                   по команде c  этот  сигнал  проигнорируется.  Если
                   указан номер_строки, то перед началом выполнения в
                   заданную строку будет  вставлена  временная  точка
                   прерывания, которая после завершения команды будет
                   удалена.

              номер_строки g счетчик
                   Продолжить выполнение после точки прерывания,  на-
                   чиная со строки с заданным номером.  Если  счетчик
                   задан,  будет  проигнорировано  (счетчик-1)  точек
                   прерывания.

              s счетчик
              S счетчик
                   Пошаговое выполнение программы. Счетчик  указавает
                   количество строк,  выполняемых  за  один  шаг;  по
                   умолчанию выполняется одна строка.  По  команде  S
                   отлаживается только текущая процедура - строки вы-
                   зываемых процедур не учитываются.

              i
              I    Пошаговое выполнение машинных команд. По команде I
                   выполнение будет продолжено с возбуждения сигнала,
                   вызвавшего приостановку программы, а по команде  i
                   этот сигнал игнорируется.

              переменная$m счетчик
              адрес:m счетчик
                   Аналогично s, но выполняется до тех пор,  пока  по
                   указанному адресу не будет занесено  новое  значе-
                   ние. Переменная должна быть  доступна  из  текущей
                   процедуры. Если счетчик не указан, его можно  счи-
                   тать бесконечно большим. Так  как  данная  команда
                   выполняется программно, она работает  крайне  мед-
                   ленно.

              уровень v
                   Задать полноту выводимой информации при выполнении
                   команд s, S, m. Если уровень опущен, то  выводится
                   только название подпрограммы  и  исходного  файла.
                   Если уровень 1 или больше, то при выполнении выво-
                   дится также исходная строка. Если  уровень  2  или
                   больше, то также выводятся все команды ассемблера,
                   соответствующие данной строке.

              k    Терминировать  процесс,  выполняющий  отлаживаемую
                   программу.

              процедура(арг1, арг2, ... )
              процедура(арг1, арг2, ... )/m
                   Выполнить указанную процедуру с заданными аргумен-
                   тами. Аргументы могут быть целыми числами,  симво-
                   лами,  цепочками  символов или именами переменных,
                   доступных из текущей процедуры. Во втором варианте
                   результат выполнения процедуры выводится в формате
                   m (по умолчанию d). Выполнить отдельную  процедуру
                   можно, лишь если редактирование связей осуществля-
                   лось командой cc -g.

              номер_строки b команды_отладчика
                   Установить точку прерывания на  указанную  строку.
                   Если указано имя процедуры без номера_строки (нап-
                   ример, proc:), точка прерывания устанавливается на
                   первую строку процедуры, даже если она  компилиро-
                   валась без опции -g. Если номер_строки не  указан,
                   то точка  прерывания  устанавливается  на  текущую
                   строку. Если команды_отладчика не указаны, то  вы-
                   полнение приостанавливается перед точкой  прерыва-
                   ния и управление возвращается sdb. Иначе при  дос-
                   тижении точки прерывания выполняются указанные ко-
                   манды_отладчика и работа  программы  продолжается.
                   Если команд несколько, они  разделяются  точкой  с
                   запятой. Если в качестве команды  используется  k,
                   то управление передается sdb.

              B    Вывести список точек прерывания.

              номер_строки d
                   Снять точку прерывания с заданной строки. Если но-
                   мер_строки не указан, то запрашивается подтвержде-
                   ние на удаление каждой точки прерывания:  выдается
                   ее местоположение и читается ответ (со стандартно-
                   го ввода). Если ответ начинается с  y  или  d,  то
                   точка прерывания снимается.

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

              l    Вывести последнюю выполненную строку.

              номер_строки a
                   Оповещение. Если номер_строки имеет  вид  процеду-
                   ра:номер, то выполняется команда номер_строки b l.
                   Если номер_строки имеет вид процедура:, то  выпол-
                   няется команда процедура: b T.

           Прочие команды
              !команда
                   Команда интерпретируется shell'ом [см. sh(1)].

              перевод_строки
                   Если предыдущая команда выводила  строку  исходной
                   программы, то после нажатия клавиши "перевод стро-
                   ки"  будет  выведена  следующая  строка  исходного
                   текста, которая и станет текущей. Если  предыдущая
                   команда выводила содержимое ячейки памяти, то  вы-
                   водится содержимое следующей ячейки.

              CTRL+D
                   "Прокрутить". Вывести следующие 10 строк исходного
                   текста, команд или данных в зависимости  от  того,
                   что выводилось в последний раз.

              <имя_файла
                   Читать команды из указанного файла; по  достижении
                   его конца читать команды  со  стандартного  ввода.
                   Эта команда не может быть вложенной.

              M    Вывести тройки, управляющие отображениями адресов.

              М [?/] [*] b e f
                   Изменить тройку, управляющую отображением адресов.
                   Аргументы ? и / указавают на отображения, ассоции-
                   рованные с об ектным_файлом и образом_памяти соот-
                   ветственно. Если не указана *, то изменяется  пер-
                   вая тройка (b1, e1, f1), иначе - вторая. Если  за-
                   дано меньше трех значений, то оставшиеся  элементы
                   тройки остаются неизменными.

              "строка
                   Вывести указанную строку. Разрешается использовать
                   управляющие последовательности  языка  C  \символ,
                   где символ не есть цифра.

              q    Выйти из отладчика.

           Команды отладки отладчика
              V    Вывести версию отладчика.

              Q    Вывести список отлаживаемых файлов и процедур.

              Y    Переключить режим выдачи внутренней отладочной ин-
                   формации.

      ФАЙЛЫ
              a.out
              core

      СМ. ТАКЖЕ
              cc(1), f77(1), sh(1).
              a.out(4), core(4), syms(4) в Справочнике программиста.

      ПРЕДОСТЕРЕЖЕНИЯ
              При выводе значения внешней переменной, для которой от-
              сутствует отладочная информация, перед ее значением вы-
              водится предупреждение. Ее типом по умолчанию считается
              int.

              Данные, хранящиеся в секции команд, недоступны из функ-
              ций.

              Если функция была оптимизирована, то информация о номе-
              рах строк может  не  соответствовать  действительности.
              Более того, часть информации может быть потеряна.

      СЮРПРИЗЫ
              Если процедура вызвана, когда программа не остановилась
              на точке прерывания (например, при отладке образа памя-
              ти), то перед началом выполнения процедуры все перемен-
              ные  инициализируются. Это делает невозможным использо-
              вание процедур, которые  осуществляют  форматный  вывод
              данных из образа памяти.

              Отладчик  sdb  плохо  приспособлен  для  отладки  Форт-
              ран-программ. Трудно получить доступ к элементам  общих
              блоков и формальным  аргументам,  элементы  многомерных
              массивов нумеруются по строкам, а не по столбцам. Кроме
              того, sdb несовместим с компилятором svs(1). Рекоменду-
              ем пользоваться отладчиком КРОТ.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк