Отладка с помощью 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 & показывает, что вам нужно специальное форматирование, а также действует как индекс для выбора элемента из списка. Если элемент списка является строкой, то вставляемое число форматируется с использованием функции Emacsformat
; в противном случае, число передается как параметр соответствующему элементу списка.
В любом исходном файле, команда Emacs C-x SPC (gdb-break
)
велит GDB установить точку останова на строке исходного текста,
в которой находится точка.
Если вы случайно удалите буфер отображения исходного текста, его можно легко
вернуть обратно, введя команду f
в буфере GDB, чтобы запросить
отображение кадра; когда выполнение происходит под управлением Emacs,
это при необходимости создает исходный буфер заново, чтобы показать вам
текущий кадр.
Исходные файлы, отображаемые в Emacs, находятся в обычных буферах Emacs, которые получают доступ к исходным файлам обычным способом. При желании вы можете редактировать файлы в этих буферах; но помните, что GDB взаимодействует с Emacs в терминах номеров строк. Если вы добавите или удалите строки из текста, известные GDB номера строк больше не будут соответствовать коду.
[Содержание] [Назад] [Пред] [Вверх] [След] [Вперед]