Отладка с помощью GDB - 17. Использование GDB под управлением gnu Emacs

[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]  


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

Специальный интерфейс позволяет вам использовать GNU Emacs для просмотра (и редактирования) исходных файлов программы, которую вы отлаживаете с помощью GDB.

Чтобы использовать этот интерфейс, используйте команду M-x gdb в Emacs. В качестве аргумента задайте выполняемый файл, который вы хотите отладить. Эта команда вызывает GDB как подпроцесс Emacs с вводом и выводом через заново созданный буфер.

Под управлением Emacs, GDB используется точно так же, как обычно, за исключением двух моментов:

  • Весь "терминальный" ввод и вывод происходит через буфер Emacs.

Это относится как к командам GDB и их выводу, так и к вводу и выводу, производимыми отлаживаемой программой.

Это полезно, потому что вы можете копировать текст предыдущих команд и вводить их снова; вы даже можете использовать таким образом части вывода.

Все средства режима оболочки Emacs доступны для взаимодействия с вашей программой. В частности, вы можете посылать сигналы обычным путем--- например, C-c C-c для прерывания, C-c C-z для остановки.

  • GDB отображает исходный код через Emacs.

Каждый раз, когда 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 (см. раздел `Числовые аргументы' в Руководство по 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 номера строк больше не будут соответствовать коду.


[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]