gcc -g myprogram.c
Компилирует myprogram.c с опцией отладки (-g). Вы все еще получаете a.out, но он содержит отладочную информацию, которая позволяет вам использовать переменные и имена функций внутри GDB, а не сырые области памяти (не весело).
GDB a.out
Открывает GDB с файлом a.out, но не запускает программу. Вы увидите приглашение (GDB) — все примеры из этого приглашения.
р
r arg1 arg2
г <файл1
Три способа запуска «a.out», загруженные ранее. Вы можете запустить его напрямую (r), передать аргументы (r arg1 arg2) или передать файл. Обычно вы устанавливаете контрольные точки перед запуском.
Помогите
ч точки останова
Списки справочных тем (help) или получение справки по конкретной теме (h контрольных точек). ГБД хорошо документировано.
q — Выйти из GDB
Шаги позволяют отслеживать путь к вашей программе и сосредоточиться на коде, который дает сбой или возвращает неверный ввод.
-
L
-
л 50
-
я моя функция
-
Перечисляет 10 строк исходного кода для текущей строки (l), конкретной строки (l 50) или для функции (l myfunction).
-
-
следующий
-
Запускает программу до следующей строки, затем делает паузу. Если текущая строка является функцией, она выполняет всю функцию, затем приостанавливается. Далее хорошо для быстрого просмотра вашего кода.
-
-
шаг
-
Запускает следующую инструкцию, а не строку. Если текущая инструкция устанавливает переменную, она такая же, как следующая . Если это функция, она перейдет в функцию, выполнит первый оператор, затем сделает паузу. шаг хорош для того, чтобы погрузиться в детали вашего кода.
-
-
Конец
-
Завершает выполнение текущей функции, затем приостанавливается (также называется выходом). Полезно, если вы случайно вошли в функцию.
-
L
л 50
я моя функция
Перечисляет 10 строк исходного кода для текущей строки (l), конкретной строки (l 50) или для функции (l myfunction).
следующий
Запускает программу до следующей строки, затем делает паузу. Если текущая строка является функцией, она выполняет всю функцию, затем приостанавливается. Далее хорошо для быстрого просмотра вашего кода.
шаг
Запускает следующую инструкцию, а не строку. Если текущая инструкция устанавливает переменную, она такая же, как следующая . Если это функция, она перейдет в функцию, выполнит первый оператор, затем сделает паузу. шаг хорош для того, чтобы погрузиться в детали вашего кода.
Конец
Завершает выполнение текущей функции, затем приостанавливается (также называется выходом). Полезно, если вы случайно вошли в функцию.
Точки останова или наблюдения
Точки останова играют важную роль в отладке. Они приостанавливают (ломают) программу, когда она достигает определенной точки. Вы можете просматривать и изменять переменные и возобновлять выполнение. Это полезно, когда происходит сбой какого-либо входа или если входы должны быть проверены.
-
перерыв 45
-
сломать мою функцию
- Устанавливает точку останова в строке 45 или в myfunction. Программа остановится, когда достигнет точки останова.
-
смотреть х == 3
-
Устанавливает точку наблюдения, которая приостанавливает программу при изменении условия (при изменении x == 3). Точки наблюдения отлично подходят для определенных входов (myPtr! = NULL) без необходимости прерывать каждый вызов функции.
-
-
Продолжить
-
Возобновляет выполнение после приостановки точкой останова / наблюдения. Программа будет продолжаться, пока не достигнет следующей точки останова / наблюдения.
-
-
удалить N
- Удаляет точку останова N (точки останова нумеруются при создании).
перерыв 45
сломать мою функцию
смотреть х == 3
Устанавливает точку наблюдения, которая приостанавливает программу при изменении условия (при изменении x == 3). Точки наблюдения отлично подходят для определенных входов (myPtr! = NULL) без необходимости прерывать каждый вызов функции.
Продолжить
Возобновляет выполнение после приостановки точкой останова / наблюдения. Программа будет продолжаться, пока не достигнет следующей точки останова / наблюдения.
удалить N
Установка переменных
Просмотр и изменение переменных во время выполнения является важной частью отладки. Попробуйте указать недопустимые входные данные для функций или запустить другие тестовые примеры, чтобы найти основную причину проблем. Как правило, вы будете просматривать / устанавливать переменные, когда программа приостановлена.
-
печать х
-
Печатает текущее значение переменной x. Возможность использовать оригинальные имена переменных — вот почему необходим флаг (-g); Программы, составленные регулярно, удаляют эту информацию.
-
-
установить х = 3
-
установить х = у
- Устанавливает x в установленное значение (3) или в другую переменную (y)
-
позвоните myfunction ()
-
позвоните в мою другую функцию (х)
-
Звоните Стрлен (Mystring)
-
Вызывает пользовательские или системные функции. Это чрезвычайно полезно, но остерегайтесь вызова функций с ошибками.
-
-
дисплей х
-
Постоянно отображается значение переменной x, которое отображается после каждого шага или паузы. Полезно, если вы постоянно проверяете определенное значение.
-
-
не показывать x
- Удаляет постоянное отображение переменной, отображаемой командой display.
печать х
Печатает текущее значение переменной x. Возможность использовать оригинальные имена переменных — вот почему необходим флаг (-g); Программы, составленные регулярно, удаляют эту информацию.
установить х = 3
установить х = у
позвоните myfunction ()
позвоните в мою другую функцию (х)
Звоните Стрлен (Mystring)
Вызывает пользовательские или системные функции. Это чрезвычайно полезно, но остерегайтесь вызова функций с ошибками.
дисплей х
Постоянно отображается значение переменной x, которое отображается после каждого шага или паузы. Полезно, если вы постоянно проверяете определенное значение.
не показывать x
Возврат и изменение кадров
Стек — это список текущих вызовов функций — он показывает, где вы находитесь в программе. Во фрейме хранятся сведения об одном вызове функции, например аргументы.
-
Б.Т.
-
Возвращает или печатает текущий стек функций, чтобы показать, где вы находитесь в текущей программе. Если основные вызовы функции a (), которая вызывает b (), которая вызывает c (), обратная трассировка
-
Б.Т.
Возвращает или печатает текущий стек функций, чтобы показать, где вы находитесь в текущей программе. Если основные вызовы функции a (), которая вызывает b (), которая вызывает c (), обратная трассировка
c <= current location b a main
вверх
вверх
вниз
-
Перейти к следующему кадру вверх или вниз в стеке функций. Если вы находитесь в c, вы можете перейти к b или a, чтобы проверить локальные переменные.
вниз
Перейти к следующему кадру вверх или вниз в стеке функций. Если вы находитесь в c, вы можете перейти к b или a, чтобы проверить локальные переменные.
вернуть
- Возвращает из текущей функции.
вернуть
Обработка сигналов
Сигналы — это сообщения, генерируемые после определенных событий, таких как таймер или ошибка. GDB может останавливаться, когда встречает сигнал; вы можете игнорировать их.
обрабатывать [имя сигнала] [действие]
ручка SIGUSR1 ностоп
ручка SIGUSR1 нопринт
обрабатывать SIGUSR1 игнорировать
Поручите GDB игнорировать определенный сигнал (SIGUSR1) при его возникновении. Существуют разные уровни игнорирования.