Go to the first, previous, next, last section, table of contents.


Использование GDB под управлением GNU Emacs

Специальный интерфейс позволяет вам использовать 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 в дополнение к стандартным командам режима оболочки:

C-h m
Описывает возможности режима GDB Emacs.
M-s
Выполнить до другой строки исходного текста, подобно команде GDB step; также обновляет окно отображения для показа текущего файла и положения в нем.
M-n
Выполнить до следующей строки исходного текста в этой функции, пропуская все вызовы функций, подобно команде GDB next. Затем обновить окно отображения, чтобы показать текущий файл и положение в нем.
M-i
Выполнить одну инструкцию, подобно команде GDB stepi; обновляет окно отображения.
M-x gdb-nexti
Выполнить до следующей инструкции, используя команду GDB nexti; обновляет окно отображения.
C-c C-f
Выполнить до выхода из выбранного кадра стека, подобно команде GDB finish.
M-c
Продолжить выполнение вашей программы, подобно команде GDB continue. Предупреждение: В Emacs версии 19, эта команда вызывается посредством C-c C-p.
M-u
Подняться вверх по стеку на число кадров, заданное числовым параметром, подобно команде GDB up (see section `Числовые аргументы' in Руководство по GNU Emacs). Предупреждение: В Emacs версии 19, эта команда вызывается посредством C-c C-u.
M-d
Спуститься вниз по стеку на число кадров, заданное числовым параметром, аналогично команде GDB down. Предупреждение: В Emacs версии 19, эта команда вызывается посредством C-c C-d.
C-x &
Прочитать число в позиции курсора и вставить его в конец буфера ввода-вывода GDB. Например, если вы хотите дисассемблировать код по адресу, отображенному ранее, наберите disassemble; затем переместите курсор на изображение адреса и задайте аргумент для 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 номера строк больше не будут соответствовать коду.


Go to the first, previous, next, last section, table of contents.