Изучаем С используя GDB. GDB: ближе к телу Управление точками останова

  • 10.10.2022
Linux: Полное руководство Колисниченко Денис Николаевич

22.2. Отладчик gdb

22.2. Отладчик gdb

Формат вызова отладчика gdb следующий:

gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-sе prog] [-c core] [-x cmds] [-d dir] ]

Ключи отладчика описаны в таблице 22.1.

Ключи командной строки gdb Таблица 22.1

Ключ Назначение
-help или -h Вывод краткого описания всех параметров
-nx или -n Не обрабатывать команды файла инициализации.gdbinit
-q Не выводить приветствие и информацию об авторских правах
-batch Командный режим. Отладчик возвращает 0, если были выполнены все команды, указанные в файле, заданном параметром -x (и файле.gdbinit, если его использование разрешено). Если же хотя бы одна из команд не выполнена, возвращается ненулевое значение
-cd=каталог Установить рабочий каталог (по умолчанию используется текущий каталог)
-f или -fullname Данная опция нужна, если вы планируете использовать интерфейс текстового процессора Emacs для отладки ваших программ с помощью gdb . Для более подробного описаний обратитесь к справочной системе
-b bps (bits per second) Установить скорость обмена информацией по последовательному интерфейсу, если вы отлаживаете вашу программу удаленно
-tty=терминал Установить терминал в качестве стандартного ввода и вывода для отлаживаемой программы.
-s файл или -symbols=файл Читает таблицу символов из указанного файла
-write Разрешить запись в исполняемые и core-файлы
-e программа Использовать указанную программу в качестве фильтра дампа
-se=файл Читать таблицу символов из указанного файла и использовать указанный файл в качестве исполнимого
-core=файл или -с файл Указать файл дампа
-command=файл или -x файл Выполнить указанные в файле команды (используется в командном режиме)
-d каталог Добавить каталог к списку поиска исходных текстов
Последний параметр задает объект, который нужно отлаживать. Вы можете задать программу (prog), или дамп-файл (core), который будет создан в случае ошибки программы (Segmentation fault), или же подсоединиться к уже запущенному процессу (procID)
-p PID Подключиться к уже запущенному процессу (данная опция стала доступной в версии gdb 5.2)

Чтобы использовать gdb для отладки вашей программы, нужно добавить в исполняемый файл отладочную информацию. Для этого откомпилируете вашу программу с опцией -g:

$ gcc -g -o prog prog.c

Данная опция включает отладочную информацию в родном для операционной системы формате, с которым может работать gdb .

Затем нужно вызвать gdb так:

Если после запуска вашей программы произошла ошибка и был создан дамп-файл (core), можно передать отладчику и этот файл:

Можно также подключиться к уже запущенному процессу, для этого нужно передать его PID:

Только убедитесь сначала в том, что у вас нет файла 1111, поскольку gdb сначала ищет исполняемый файл, затем core-файл, а уже затем PID.

После запуска отладчика в интерактивном режиме вы можете использовать команды, самые важные из которых перечислены в таблице 22.2. Об остальных можно узнать в справочной системе: man gdb.

Команды gdb Таблица 22.2

Команда Назначение
break [файл:]функция Установить точку останова
run [аргументы] Запустить программу и передать ей указанные аргументы
bt Обратная трассировка: отобразить стек программы
print выражение Вывести значение выражении, операндами могут быть переменные, объявленные в вашей программа
С Продолжить выполнение программы (после останова)
Next Выполнить следующую строку. Это так называемый шаг «над» (step over). Если следующая строка - вызов функции, то мы выполним ее за один шаг - «перешагнем» ее
Step Выполнить следующую строку, Это так называемый шаг «в» (step into). Если следующая строка - вызов функции, то мы будем последовательно выполнять все операторы тела функции
help [имя] Вывести справку о команде отладчика или вывести общую информацию о нем
Quit Выход

В данной таблице приведены далеко не все команды. Если вас интересует более полная информация, обратитесь к руководству по gdb .

Из книги Язык программирования С# 2005 и платформа.NET 2.0. автора Троелсен Эндрю

Отладчик командной строки (cordbg.exe) Прежде чем перейти к рассмотрению возможностей компоновки C#-приложе-ний с помощью TextPad, следует отметить, что.NET Framework 2.0 SDK предлагает отладчик командной строки cordbg.ехe. Этот инструмент имеет множество опций, которые позволяют выполнить

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

4.3. Отладчик GNU gdb - это отладчик, рекомендуемый Free Software Foundation, gdb представляет собой хороший отладчик командной строки, на котором строятся некоторые инструменты, включая режим gdb в Emacs, графический отладчик Data Display Debugger (http://www.gnu.org/software/ddd/) и встроенные отладчики в некоторых

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

22.2. Отладчик gdb Формат вызова отладчика gdb следующий:gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-sе prog] [-c core] [-x cmds] [-d dir] ]Ключи отладчика описаны в таблице 22.1.Ключи командной строки gdb Таблица 22.1 Ключ Назначение -help или -h Вывод краткого описания всех

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

1.4. GNU-отладчик gdb Отладчик - это программа, с помощью которой можно узнать, почему написанная вами программа ведет себя не так, как было задумано. Работать с отладчиком приходится очень часто. Большинство Linux-программистов имеет дело с GNU-отладчиком (GNU Debugger, GDB), который

Из книги Разработка ядра Linux автора Лав Роберт

Отладчик kgdb Отладчик kgdb - это заплата ядра, которая позволяет с помощью отладчика gdb отлаживать ядро по линии последовательной передачи. Для этого требуется два компьютера. На первом выполняется ядро с заплатой kgdb. Второй компьютер используется для отладки ядра по линии

GDB относится к «умным» программам-отладчикам, то есть таким, которые «понимают» код и умеют выполнять его построчно, менять значения переменных, устанавливать контрольные точки и условия остановки… Словом, делать всё для того, чтобы разработчик мог проверить правильность работы своей программы.

GDB встроен во многие UNIX -подобные системы и умеет производить отладку нескольких языков программирования. Си - в их числе.

Чтобы вызвать GDB введите в терминале команду

Gdb [ имя_программы_которую_вы_хотите_отладить]

Чтобы выйти из GDB : введите команду

Quit или С –d

Другие важные команды GDB

run [аргументы командной строки программы] Запустить программу на выполнение. break [ номер строки / имя функции] Установить точку остановки программы на определенной строке или функции. next Перейти на следующую строку, не заходя внутрь функций. step Перейти на следующую строку. Если на строке вызов функции - зайти внутрь нее. list Вывести фрагмент кода программы (несколько строк вокруг того места, где сейчас установлена точка) print [ переменная] Вывести значение переменной на экран. info locals Вывести текущие значения всех локальных переменных внутри цикла, функции и так далее. display [ переменная] Вывести значение переменной на каждом шаге отладки. help Показать список всех команд GDB.

Давайте посмотрим, как работать с GDB на примере программы caesar.c, которую вы, скорее всего уже написали на прошлой неделе. Проверять будем на собственной версии, так что у вас результаты могут несколько отличаться в зависимости от реализации.

Итак, переходим в папку pset2 (думаем, вы уже помните, как это сделать) в «Виртуальной лаборатории cs50» или CS50 IDE. Вводим команду:

Gdb . /caesar

В программе caesar есть одна функция, main. Установим точку остановки программы на функции main:

break main

Запустим программу caesar с аргументом «3»:

Run 13

Допустим, нам надо проверить значение argc:

Print argc

Вот как всё это должно выглядеть в окне терминала:

Теперь выполняем программу пошагово с помощью команды next . Выполним несколько раз.

Здесь переменной key присваивают значение. Проверим, какое значение она имеет этой строке:

При первом вызве next переменной key присваивается значение «0». ПОчему так, если мы ввели число 3? Дело в том, что команда ещё не была выполнена. Когда вы вводим next ещё несколько раз, программа предлагает ввести текст.

Выполнив команду next еще раз, мы зайдем внутрь цикла с условием.

Введение

Откровенно говоря, программа GNU GDB довольно многофункциональная. Пошаговая от-лад-ка — лишь одна из ее возможностей. В этой статье я попытался описать те лишь команды GDB, которые позволяют проводить удобную пошаговую отладку программ, на-пи-сан-ных на Free Pascal.

Чтобы программу можно было отлаживать, она должна быть откомпилирована с ключом -g .

Поскольку GDB ориентирован не на Pascal, а на C и C++, то использование GDB для от-лад-ки Pascal-программ иногда сопряжено с неудобствами.

Приведу список подводных камней, обнаруженных мною и разработчиками Free Pascal (пе-ре-чис-лен-ных в user"s manual).

  1. Отладочная информация в Free Pascal генерируется в верхнем регистре. Поэтому имена всех переменных, процедур, функций при использовании GDB должны указываться БОЛЬШИМИ БУКВАМИ.
  2. GDB не воспринимает тип extended (ведь в C такого типа нет). Обойти эту неприятность можно, если, например, включить в код такие строки...
    type
    {$IFDEF DEBUG}
    dbl = double;
    {$ELSE}
    dbl = extended;
    {$ENDIF}
    ...

    var x: dbl;
    ...

  3. К элементам многомерных массивов нужно обращаться в C-шной манере, а именно, команда (gdb) print A выдаст первую строку массива A. Для просмотра требуемого элемента следует писать (gdb) print A
  4. GDB не воспринимает множества.
  5. Есть трудности с поддержкой объектов (см. user"s manual за подробностями).
  6. Есть трудности с глобально переопределенными функциями. (за подробностями см. user"s manual).
  7. При отладке процедур, функций, расположенных в разных файлах, часто возникает несоответствие — смещение строк. Та строка, которую GDB показывает текущей, таковой не является, а текущая расположена строк эдак на двадцать выше. Это приводит к большим неудобствам при пошаговой отладке. Я для себя сделал из этого такую мораль — хоть GDB и позволяет отлаживать процедуры, описанные в разных файлах, но лучше этой возможностью не пользоваться, а на время отладки все вызываемые процедуры, работа которых вас заинтересует, помещать в одном файле.

Все примеры отлаживались с использованием GNU GDB 5.0.

Запуск отладчика GDB

gdb [опции] [имя_файла | ID процесса]

После запуска видим "nice GDB logo" (если это почему-то раздражает, то опция -q поз-во-ля-ет не выводить это введение с ин-фор-ма-ци-ей об авторских правах и прочая). В следующей стро-ке приглашение
(gdb)
ждет ввода команды.

Ниже приводится краткий перечень команд GDB.

Краткую справку о любой команде можно получить, введя
(gdb) help [имя_команды, можно краткое]

Если при запуске GDB имя исполняемого файла не было указано (что следовало бы делать), то указать его можно командой file .

Команда file

(gdb) file <имя исполняемого файла, который подлежит отладке>


Для того, чтобы пролистать содержимое исходника, используйте команду list (сокращенно l ; бо льшая часть наиболее полезных ко-манд имеют сокращения). При этом под-ра-зу-ме-ва-ет-ся, что исходник расположен в том же каталоге, что и исполняемый файл. Как правило, так оно и есть.

Команда list (сокращенно l)

Пролистывает 10 строк вниз, начиная с текущей. Для пролистывания вверх следует набрать

Команда run (сокращенно r)

Запускает отлаживаемую программу под GDB. Если требуется, то после команды можно ука-зать список аргументов программы. Так-же допускается перенаправление потоков ввода и вы-во-да в другие файлы, например

(gdb) run > outfile

Если никаких точек останова не определено, то программа выполняется тихо, при этом нам со-об-ща-ет-ся:

(gdb) run
Starting program: test
Program exited normally.
(gdb)

Если же отладчик встречает точку останова, он выдает ее номер, адрес и дополнительную ин-фор-ма-цию — текущую строку, имя про-це-ду-ры, и т.п.

(gdb) r
Breakpoint 1, main () at test.pp:3
Current language: auto; currently pascal
3 x:= x + 1;
(gdb)

И ожидает ввода команды.

Остановка отладки программы

Команда kill (k). Следует запрос

(gdb) kill
Kill the program being debugged? (y or n) y
(gdb)

Здесь введено y (то есть "да"), и отладка программы прекращается. Командой run ее можно на-чать заново, при этом все точки ос-та-но-ва (breakpoints), точки просмотра (watchpoints) и точ-ки отлова (catchpoints) сохраняются.

Выход из отладчика

Команда quit (q).

(gdb) q
$

Точки останова


(gdb) help breakpoints

Точки останова — такие, когда GDB приостанавливает выполнение программы. Как уже упо-ми-на-лось, имеется 3 типа точек ос-та-но-ва:

  1. Breakpoints — точка останова как таковая. Остановка происходит, когда выполнение доходит до определенной строки, адреса или процедуры/функции.
  2. Watchpoints — точка просмотра. Выполнение программы приостанавливается, если программа обратилась к определенной переменной — либо считала ее значение, либо изменила его.
  3. Catchpoints — точка отлова. Приостановка происходит при определенном событии (например, получение сигнала). Я не буду касаться точек останова этого типа.

Определение точек останова

Breakpoint

Команда break
(gdb) break [аргумент]
или, сокращенно
(gdb) b [аргумент]
определяет точку останова. В качестве аргумента может выступать

  • номер строки . Остановка произойдет при достижении строки программы с этим номером. То, что написано в самой строке, выполняться не будет. Например (gdb) b 394 Breakpoint 1 at 0x805a650: file maeq.pas, line 394.
  • имя процедуры (функции) . Отладчик зайдет в эту процедуру и остановит выполнение программы. NB!! Имя процедуры (функции) должно быть указано БОЛЬШИМИ БУКВАМИ. Приведу пример: (gdb) b CALC Breakpoint 2 at 0x7657c7a: file maeq.pas, line 26.
  • если вызвать команду break без аргументов , то точка останова поставится на текущей строке.
  • также можно явно указывать адрес точки останова (перед адресом надо поставить знак *). Приведу лишь пример для полноты описания: (gdb) b *0x805a650 Breakpoint 3 at 0x805a650: file maeq.pas, line 394.

Допускается использование нескольких точек останова на одной строке (функции, адресе).

Watchpoint

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

  • команда watch (сокращенно wa) (gdb) wa <переменная> Выполнение программы приостанавливается всякий раз, когда значение указанной переменной изменяется.
  • команда rwatch (сокращенно rw) (gdb) rw <переменная> Выполнение приостанавливается всякий раз, когда программа считывает значение указанной переменной.
    NB!! Имя переменной должно быть указано БОЛЬШИМИ БУКВАМИ.
  • команда awatch (сокращенно aw) (gdb) aw <переменная> Выполнение приостанавливается всякий раз, когда программа обращается к указанной переменной, как для считывания, так и для записи.
    NB!! Имя переменной должно быть указано БОЛЬШИМИ БУКВАМИ.

Замечу от себя, что команды rwatch и awatch у меня почему-то капризничают — часто не ус-та-нав-ли-ва-ют точки просмотра на пе-ре-мен-ную. Зато команда watch работала всегда.

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

Информацию о всех установленных точках останова можно вывести командой info .

Команда info имеет много возможностей, но в данном случае воспользуемся лишь сле-дую-щим ее форматом:
(gdb) info breakpoints
или, кратко
(gdb) i b

Выводится подробная информация о всех точках останова (как breakpoints, так и watch-points), включающая - номер - breakpoint или watchpoint - активность - сколько раз прог-рам-ма натыкалась на эту точку - иные характеристики, значение которых мне не со-всем понятно

Если какая-то точка останова не нужна, то ее можно сделать неактивной с помощью ко-ман-ды disable:

(gdb) disable breakpoint <номер этой точки>

Обратно, деактивированная точка останова активируется командой enable:

(gdb) enable breakpoint <номер этой точки>

Статус точки останова — активна она или нет, легко обозреть той же командой info .

Если же точка останова не требуется вообще, то она может быть удалена насовсем.

(gdb) delete breakpoint [номер точки]

(gdb) d b [номер точки]

Ввод этой команды без аргумента удалит ВСЕ точки останова.

Возобновление выполнения, пошаговая отладка

Информацию о командах этого раздела можно получить, введя

(gdb) help running

Команда continue (c)

(gdb) с [аргумент]

Продолжает выполнение остановленной программы. Выполнение будет происходить, пока сно-ва не встретится точка останова. В ка-чест-ве аргумента может использоваться целое чис-ло N. Это укажет отладчику проигнорировать (N-1) точку останова (вы-пол-не-ние остановится на N-ой).

Команда step (s)

(gdb) s [аргумент]

Аналог действия клавиши F7 (Trace into) в IDE. Происходит выполнение программы до тех пор, пока не будет достигнута сле-дую-щая строка ее кода. При указании аргумента — це-ло-го чис-ла N, отладчик выполняет команду step N раз (если не останавливает вы-пол-не-ние из-за точек останова или по иным причинам).

Команда next (n)

(gdb) n [аргумент]

Аналог действия клавиши F8 (Step over) в IDE. В отличие от step вызов процедуры счи-та-ет-ся единой инструкцией (не заходит в вы-зы-вае-мые процедуры, функции). Аргумент N ра-бо-та-ет так же, как и для step .

Команда finish (fin)

(gdb) fin

Выполняет программу до момента выхода из текущей процедуры (функции). Если функция воз-вра-ща-ет значение, то это значение вы-во-дит-ся тоже.

Команда until (u)

Производит выполнение программы до тех пор, пока не будет достигнута строка с номером, бо ль-шим текущего. Команду until удоб-но применять при отладке циклов. Остановка про-и-зой-дет также, если программа при выполнении цикла выйдет из текущей про-це-ду-ры, функ-ции.

Команда stepi (si)

(gdb) si [аргумент]

Действие подобно step , но выполняется не строка, а ровно одна инструкция в этой строке прог-рам-мы. Аргумент N нужен, если тре-бу-ет-ся выполнить N инструкций.

Команда nexti (ni)

(gdb) ni [аргумент]

Аналогична stepi , но вызовы процедур трактуются как одна инструкция.

Управление состоянием (просмотр, изменение) переменных при отладке

Информацию о командах этого раздела можно получить, введя

(gdb) help data

Команда print (p)

(gdb) print <выражение>

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

Часто требуется отслеживать значения нескольких переменных. Чтобы не утруждать себя мно-го-крат-ным вводом команды print , ис-поль-зуй-те команду display .

Команда display

(gdb) display [аргумент]

В качестве аргумента обычно указывают переменную или выражение. При этом указанная пе-ре-мен-ная (выражение) занесется в дис-плей, то есть станет выводиться при каждой ос-та-нов-ке программы (при попадании на точку останова, при пошаговом вы-пол-не-нии командами step и next , etc). Если вызвать display без аргументов, то GDB выдаст значения всех пе-ре-мен-ных (вы-ра-же-ний), занесенных в дисплей.

Управление списком этих переменных осуществляется аналогично точкам останова. А имен-но, команда info display

(gdb) info display

выдаст все переменные, занесенные в дисплей. Любая переменная в списке дисплея может быть дезактивирована

(gdb) disable display <номер переменной в списке дисплея>

или активирована заново

(gdb) enable display <номер переменной в списке дисплея>

Удаление переменной из списка дисплея производится командой delete или командой undisplay . Так, команда

(gdb) delete display [номер переменной в списке дисплея]

делает то же, что и

(gdb) undisplay [номер переменной в списке дисплея]

Опять-таки, если не указать номер переменной, то очистится весь список отображаемых пе-ре-мен-ных.

Изменение значения переменной

И последнее. Изменение значения переменной на другое можно, например, произвести с по-мощью команд set или print .

(gdb) set <оператор присваивания> (gdb) print <оператор присваивания>

Например,

(gdb) whatis x
TYPE = WORD
(gdb) p x
$1 = 1
(gdb) set x:=2
(gdb)

При использовании set присваивание происходит "тихо". То же самое можно сделать, но с по-мощью команды print .

Например,

(gdb) p x
$2 = 2
(gdb) p x:=x-2
$3 = 0
(gdb)

При этом, как видно, выводится новое значение переменной.

Вот и все.

Удачной отладки!

Для эффективной отладки программы, при компиляции вы должны сгенерировать отладочную информацию. Эта отладочная информация сохраняется в объектном файле; она описывает тип данных каждой переменной или функции, и соответствие между номерами строк исходного текста и адресами в выполняемом коде.

Чтобы запросить генерацию отладочной информации, укажите ключ `-g" при запуске компилятора.

Многие компиляторы Си не могут обрабатывать ключи `-g" и `-O" вместе. Используя такие компиляторы, вы не можете создавать оптимизированные выполняемые файлы, содержащие отладочную информацию.

GCC, GNU компилятор Си, поддерживает `-g" с или без `-O" , делая возможным отладку оптимизированного кода. Мы рекомендуем, чтобы вы всегда использовали `-g" при компиляции программ. Вы можете думать, что ваша программа правильная, но нет никакого смысла испытывать удачу.

Если вы запускаете вашу программу в среде выполнения, поддерживающей процессы, run создает подчиненный процесс, и этот процесс выполняет вашу программу. (В средах, не поддерживающих процессы, run выполняет переход на начало вашей программы.)

Выполнение программы зависит от определенной информации, которую она получает от породившего ее процесса. GDB предоставляет способы задать эту информацию, что вы должны сделать до запуска программы. (Вы можете изменить ее после старта, но такие изменения воздействуют на вашу программу только при следующем запуске.) Эта информация может быть разделена на четыре категории: Параметры. Задайте параметры, которые нужно передать вашей программе, как параметры команды run . Если на вашей системе доступна оболочка, она используется для передачи параметров, так что при их описании вы можете использовать обычные соглашения (такие как раскрывание шаблонов или подстановка переменных). В системах Unix, вы можете контролировать, какая оболочка используется, с помощью переменной среды SHELL . См. раздел 4.3 Аргументы вашей программы . Среда. Обычно ваша программа наследует свою среду от GDB, но вы можете использовать команды GDB set environment и unset environment , чтобы изменить часть настроек среды, влияющих на нее. См. раздел 4.4 Рабочая среда вашей программы . Рабочий каталог. Ваша программа наследует свой рабочий каталог от GDB. Вы можете установить рабочий каталог GDB командой cd . См. раздел 4.5 Рабочий каталог вашей программы . Стандартный ввод и вывод. Обычно ваша программа использует те же устройства для стандартного ввода и вывода, что и GDB. Вы можете перенаправить ввод и вывод в строке команды run , или использовать команду tty , чтобы установить другое устройство для вашей программы. См. раздел 4.6 Ввод и вывод вашей программы . Предупреждение: Хотя перенаправление ввода и вывода работает, вы не можете использовать каналы для передачи выходных данных отлаживаемой программы другой программе; если вы попытаетесь это сделать, скорее всего GDB перейдет к отладке неправильной программы.

Когда вы подаете команду run , ваша программа начинает выполняться немедленно. См. раздел 5. Остановка и продолжение исполнения , для обсуждения того, как остановить вашу программу. Как только ваша программа остановилась, вы можете вызывать функции вашей программы, используя команды print или call . См. раздел 8. Исследование данных .

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

4.3 Аргументы вашей программы

Первое, что GDB делает после подготовки к отладке указанного процесса--останавливает его. Вы можете исследовать и изменять присоединенный процесс всеми командами GDB, которые обычно доступны, когда вы запускаете процессы с помощью run . Вы можете устанавливать точки останова; вы можете пошагово выполнять программу и продолжить ее обычное выполнение, вы можете изменять области данных. Если вы решите продолжить выполнение процесса после присоединения к нему GDB, вы можете использовать команду continue . detach Когда вы закончили отлаживать присоединенный процесс, для его освобождения из под управления GDB вы можете использовать команду detach . Отсоединение процесса продолжает его выполнение. После команды detach , этот процесс и GDB снова становятся совершенно независимыми, и вы готовы присоединить или запустить с помощью run другой процесс. detach не повторяется, если вы нажмете RET еще раз после выполнения команды.

Если вы выйдете из GDB или используете команду run , пока у вас есть присоединенный процесс, вы убьете этот процесс. По умолчанию, GDB запрашивает подтверждение, если вы пытаетесь сделать одну из этих вещей; вы можете контролировать, нужно вам это подтверждение или нет, используя команду set confirm (см. раздел 15.6 Необязательные предупреждения и сообщения).

4.8 Уничтожение дочернего процесса

kill Уничтожить дочерний процесс, в котором ваша программа выполняется под управлением GDB.

Эта команда полезна, если вы хотите отладить дамп памяти, а не выполняющийся процесс. GDB игнорирует любые дампы памяти, пока ваша программа выполняется.

В некоторых операционных системах, программа не может быть выполнена вне GDB, пока у вас есть в ней точки останова, установленные отладчиком. В этой ситуации вы можете использовать команду kill , чтобы разрешить выполнение вашей программы вне отладчика.

Команда kill также полезна, если вы хотите перекомпилировать и перекомпоновать вашу программу, так как во многих системах невозможно модифицировать исполняемый файл во время выполнения процесса. В этом случае, когда вы в следующий раз введете run , GDB заметит, что файл изменился, и заново прочитает символьную таблицу (стараясь при этом сохранить ваши точки останова).