Сборка  и тестирование программ – ЧАСТЬ 2

M-x perldb  hRETфайл hRETi

Запускает интерпретатор Perl в отладочном режиме для отладки файла, про-

граммы на Perl.

M-x jdb hRETфайл hRETi

Запускает для отладки файла отладчик Java.

M-x pdb hRETфайл hRETi

Запускает для отладки файла отладчик Python.

Каждая из этих команд принимает один аргумент: командную строку для вызова отладчика.  В простейшем случае, задайте просто имя исполняемого  файла, который вы хотите отлаживать.  Вы также можете использовать ключи, поддерживаемые вашим отладчиком. Однако шаблоны и переменные оболочки недопустимы. GUD предполагает, что первый аргумент, не начинающийся  с ‘-’, является именем исполняемого файла.

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

23.5.2  Управление отладчиком

Когда вы запустили отладчик с помощью GUD, он использует  буфер Emacs для обычного ввода и вывода. Этот буфер называется буфером GUD. Отладчик показывает строки исходных файлов, обращаясь к ним в буферах Emacs. Стрелка (‘=>’) в одном из буферов указывает на исполняемую в данный момент строку.   Перемещение  точки  в буфере  не изменяет положения стрелки.

2  Для работы поддержки sdb требуется правильная таблица тегов. (Прим. переводчика)

Вы можете  в любое время начать редактировать исходные файлы в тех  буферах, которые их показывают. Стрелка не является  частью текста файла; она появляется лишь на экране.  Если вы действительно изменяете исходный файл, помните, что удаление или вставка строк собьет положение стрелки; GUD не может определить, какая строка строка соответствовала номеру строки в сообщении отладчика до вашего изменения. Кроме того, чтобы ваши изменения нашли отражение в таблицах отладчика, вам обычно придется перекомпилировать и перезапустить программу.

Если вы захотите,  вы можете  полностью управлять процессом  отладчика через его буфер, который использует вариант режима Shell. Доступны все обычные команды вашего отладчика, и вы можете использовать команды истории режима Shell для их повторения. См. Раздел 30.2.3 [Режим Shell], с. 325.

23.5.3  Команды GUD

Буфер диалога с GUD использует вариант режима Shell, так что вам доступны команды этого режима (см. Раздел 30.2.3 [Режим Shell], с. 325). Режим GUD также предоставляет команды для установки и сброса контрольных точек, для выбора фреймов  стека и для пошагового прохода по программе.   Эти  команды доступны как  в буфере  GUD, так  и глобально, но с разными привязками.

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

C-x hSPCi      Устанавливает контрольную точку в исходной строке, где находится точка.

Это другая специальная команда, предоставляемая GUD. Ключи, начинающиеся с C-c, доступны только в буфере диалога с GUD. Привязки ключей, начинающиеся с C-x C-a, доступны и в буфере диалога  с GUD, и в исходных файлах.

C-c C-l

C-x C-a C-l

Отображает в другом окне последнюю строку, на которую появилась ссылка в буфере GUD (то есть строку, указанную в последнем сообщении  о позиции в программе). Это запускает команду gud-refresh.

C-c C-s

C-x C-a C-s

Исполняет одну строку кода (gud-step). Если строка содержит вызов функции,

выполнение останавливается после входа в нее.

C-c C-n

C-x C-a C-n

Исполняет одну строку  кода, проходя через вызовы функций без остановки

(gud-next).

C-c C-i

C-x C-a C-i

Исполняет одну машинную инструкцию (gud-stepi).

C-c C-r

C-x C-a C-r

Продолжает исполнение с неопределенной  точкой останова. Программа продолжит работу до тех пор, пока не попадет на контрольную точку, завершится или получит сигнал, проверяемый отладчиком (gud-cont).

C-c C-d

C-x C-a C-d

Удаляет контрольную точку (одну или несколько) в текущей строке исходного текста, если они поставлены (gud-remove).  Если вы вызовите эту команду в

C-c C-t

буфере диалога  с GUD, она применяется к строке, на который в последний раз остановилась программа.

C-x C-a C-t

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

Перечисленные выше команды относятся ко всем поддерживаемым  отладчикам. Если вы пользуетесь GDB или DBX (некоторыми версиями), доступны такие дополнительные команды:

C-c <

C-x C-a <   Выбирает следующий  внешний фрейм стека (gud-up).   Это эквивалентно ко-

манде ‘up’.

C-c >

C-x C-a >   Выбирает следующий внутренний фрейм стека (gud-down). Это эквивалентно команде ‘down’.

Если вы пользуетесь GDB, доступны следующие привязки:

hTABi              Завершает имя символа (gud-gdb-complete-command).   Этот  ключ  доступен только в буфере диалога  с GUD и требует GDB версии 4.13 или более поздней.

C-c C-f

C-x C-a C-f

Исполняет программу до тех  пор, пока не произойдет  возврат из выбранного фрейма стека (или пока программа не остановится  по другой причине).

Эти команды интерпретируют числовой аргумент как  счетчик повторений, если это имеет смысл.

Так как hTABi  служит командой завершения, вы не можете  использовать  ее для набора знака табуляции в качестве ввода для программы, которую вы отлаживаете  в GDB. Вместо этого, чтобы ввести знак табуляции, набирайте C-q hTABi.

23.5.4  Настройка GUD

Во время запуска GUD выполняет одну из следующих  ловушек:  gdb-mode-hook, если вы пользуетесь GDB; dbx-mode-hook, если вы пользуетесь DBX; sdb-mode-hook, если вы пользуетесь SDB; xdb-mode-hook, если вы пользуетесь XDB;  perldb-mode-hook  для отладочного режима Perl; jdb-mode-hook для PDB; jdb-mode-hook для JDB. Вы можете  использовать эти ловушки для определения ваших собственных привязок ключей для буфера диалога с отладчиком. См. Раздел 31.2.3 [Ловушки], с. 349.

Вот удобный способ определить  команду, которая посылает отладчику некоторую ко-

мандную строку и устанавливает для нее привязку в буфере диалога  с отладчиком:

(gud-def функция команднаястрока привязка докстрока)

Это  определит команду с именем функция, которая посылает процессу отладчика команднуюстроку, и даст ей строку описания докстрока. Вы можете использовать определенную таким образом команду в любом  буфере.  Если привязка не равна nil, gud-def также привязывает эту команду к C-c привязка в режиме  буфера GUD и к C-x C-a привязка глобально.

Командная строка может содержать определенные ‘%’-последовательности, которые обо-

значают данные, подставляемые во время вызова функции:

‘%f’             Имя текущего исходного файла. Если текущим является буфер GUD, то “теку-

щий исходный файл” — это файл, в котором программа остановилась.

‘%l’             Номер текущей исходной строки. Если текущим является буфер GUD, то “те-

кущая исходная строка” — это строка, на которой остановилась программа.

‘%e’             Текст lvalue языка Си или выражения вызова функции, в котором или рядом с которым находится точка.

‘%a’             Текст шестнадцатиричного  адреса, в котором или рядом с которым находится точка.

‘%p’             Числовой аргумент вызванной функции в виде десятичного числа.   Если эта команда используется  без числового  аргумента, ‘%p’ будет пустой строкой.

Если вы не использовали  ‘%p’ в командной строке, определяемая вами команда будет игнорировать любой числовой аргумент.

23.6  Исполнение лисповских выражений

В Emacs есть несколько основных режимов для языков Лисп и Scheme. В них используются одни и те  же  команды редактирования, но разные команды для исполнения выражений Лиспа. У каждого режима свое предназначение.

Режим Emacs-Lisp

Режим для редактирования исходных файлов программ, запускаемых в Emacs Lisp.   Этот  режим определяет  C-M-x для вычисления текущего определения функции. См. Раздел 23.7 [Библиотеки Лиспа], с. 253.

Режим Lisp Interaction

Режим для диалогового  сеанса с Emacs Lisp. Он определяет C-j для вычисления s-выражения  перед точкой и вставки его значения в буфер. См.  Раздел 23.9 [Диалог с Лиспом], с. 255.

Режим Lisp

Режим для редактирования исходных файлов программ, которые запускают в Лиспах,  отличных от Emacs Lisp.  Этот режим определяет C-M-x так,  чтобы он посылал текущее  определение функции подчиненному Лисп-процессу. См. Раздел 23.10 [Внешний Лисп], с. 256.

Режим Inferior Lisp

Режим для диалогового сеанса с подчиненным процессом  Лиспа.   Этот  режим объединяет специальные средства режима Lisp и режима Shell (см.  Раздел 30.2.3 [Режим Shell], с. 325).

Режим Scheme

Подобен режиму Lisp, но для программ на Scheme.

Режим Inferior Scheme

Режим для диалогового  сеанса с подчиненным  процессом Scheme.

Большинство команд редактирования для работы с программами на Лиспе  на самом деле доступны глобально. См. Глава 22 [Программы], с. 205.

23.7  Библиотеки Лисппрограмм для Emacs

Лисп-программы  для команд редактирования хранятся в файлах, чьи имена традиционно оканчиваются на ‘.el’.  Это окончание сообщает Emacs, что редактировать их следует в режиме Emacs-Lisp (см. Раздел 23.6 [Исполнение Лиспа], с. 253).

Чтобы выполнить файл с кодом на Emacs Lisp, используйте  M-x load-file.   Эта команда считывает имя файла, используя  минибуфер, и затем выполняет содержимое этого файла как Лисп-программу. Для этого нет необходимости сначала обращаться к файлу, в любом случае эта команда считывает файл таким, каким он находится на диске, а не как текст в буфере Emacs.

Если файл Лисп-программы установлен в каталогах с библиотеками Emacs Lisp, пользователи могут загрузить его, используя M-x load-library.  Программы могут загрузить его, вызывая load-library, или с помощью load, более низкоуровневой  функции, которая похожа на эту, но допускает некоторые дополнительные аргументы.

M-x load-library отличается от M-x load-file тем, что она просматривает последова-

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

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий