Специальный интерфейс позволяет вам использовать GNU Emacs для просмотра (и редактирования) исходных файлов программы, которую вы отлаживаете с помощью GDB.
Чтобы использовать этот интерфейс, используйте команду M-x gdb в Emacs. В качестве аргумента задайте выполняемый файл, который вы хотите отладить. Эта команда вызывает GDB как подпроцесс Emacs с вводом и выводом через заново созданный буфер.
Под управлением Emacs, GDB используется точно так же, как обычно, за исключением двух моментов:
Это относится как к командам GDB и их выводу, так и к вводу и выводу, производимыми отлаживаемой программой.
Это полезно, потому что вы можете копировать текст предыдущих команд и вводить их снова; вы даже можете использовать таким образом части вывода.
Все средства режима оболочки Emacs доступны для взаимодействия с вашей программой. В частности, вы можете посылать сигналы обычным путем --- например, C-c C-c для прерывания, C-c C-z для остановки.
Каждый раз, когда GDB отображает кадр стека, Emacs автоматически находит исходный файл для него и помещает стрелку (`=>') с левого края текущей строки. Emacs использует отдельный буфер для отображения исходного текста и разделяет экран, чтобы отобразить как сеанс GDB, так и исходный текст.
Тем не менее, явные команды GDB list
и search
производят вывод как обычно, но у вас, скорее всего, не будет причин
использовать их из Emacs.
Предупреждение: Если каталог, в котором находится ваша программа, не является текущим, Emacs легко может ошибиться при определении местонахождения исходных файлов; в этом случае вспомогательный буфер с исходным текстом не появляется. GDB может искать программы, используя переменную среды
PATH
, так что сеансы ввода и вывода происходят нормально; но Emacs не получает достаточно информации от GDB, чтобы найти исходные файлы в такой ситуации. Чтобы избежать этой проблемы, либо запускайте режим GDB из каталога, где находится ваша программа, либо укажите абсолютное имя файла, когда будет запрошен параметр для M-x gdb.Подобная путаница может возникнуть, если вы используете команду GDB
file
, чтобы переключиться к отладке программы, находящейся в каком-нибудь другом месте, из существующего буфера GDB в Emacs.
По умолчанию, M-x gdb вызывает программу с именем `gdb'. Если вам
нужно вызвать GDB под другим именем (например, если вы храните
несколько конфигураций под различными именами), вы можете установить переменную
Emacs gdb-command-name
; например, установка
(setq gdb-command-name "mygdb")
(которой предшествует M-: или ESC :, или если она введена в буфер
*scratch*
или в вашем файле `.emacs'), заставит Emacs вызвать
программу "mygdb
".
В буфере ввода-вывода GDB, вы можете использовать следующие специальные команды Emacs в дополнение к стандартным командам режима оболочки:
step
; также обновляет окно отображения для показа текущего файла и
положения в нем.
next
.
Затем обновить окно отображения, чтобы показать текущий файл и положение
в нем.
stepi
;
обновляет окно отображения.
nexti
; обновляет окно отображения.
finish
.
continue
.
Предупреждение: В Emacs версии 19, эта команда вызывается
посредством C-c C-p.
up
(см. раздел `Числовые аргументы' в Руководство по GNU Emacs).
Предупреждение: В Emacs версии 19, эта команда вызывается
посредством C-c C-u.
down
.
Предупреждение: В Emacs версии 19, эта команда вызывается
посредством C-c C-d.
disassemble
, набрав C-x &.
Вы можете и дальше настраивать это, определяя элементы списка
gdb-print-command
; если он определен, вы можете форматировать или
как-либо иначе обрабатывать числа, задаваемые C-x &, перед их вставкой
в буфер. Числовой аргумент к C-x & показывает, что вам нужно
специальное форматирование, а также действует как индекс для выбора
элемента из списка. Если элемент списка является строкой, то вставляемое
число форматируется с использованием функции Emacs format
; в
противном случае, число передается как параметр соответствующему
элементу списка.
В любом исходном файле, команда Emacs C-x SPC (gdb-break
)
велит GDB установить точку останова на строке исходного текста,
в которой находится точка.
Если вы случайно удалите буфер отображения исходного текста, его можно легко
вернуть обратно, введя команду f
в буфере GDB, чтобы запросить
отображение кадра; когда выполнение происходит под управлением Emacs,
это при необходимости создает исходный буфер заново, чтобы показать вам
текущий кадр.
Исходные файлы, отображаемые в Emacs, находятся в обычных буферах Emacs, которые получают доступ к исходным файлам обычным способом. При желании вы можете редактировать файлы в этих буферах; но помните, что GDB взаимодействует с Emacs в терминах номеров строк. Если вы добавите или удалите строки из текста, известные GDB номера строк больше не будут соответствовать коду.