MyTetra Share
Делитесь знаниями!
Отладчик gdb - основы работы и базовые команды
Время создания: 27.02.2011 02:06
Автор: xintrea
Текстовые метки: linux, gdb, отладка, debugger, дебаг
Раздел: Компьютер - Программирование - Отладчик GDB
Запись: xintrea/mytetra_syncro/master/base/0000003433/text.html на raw.github.com

Запуск программы под отладчиком gdb


Обычно отладчик gdb используется для отладки программ на языках Си и Си++. Другие языки тоже поддерживаются, но для них требуются дополнительные модули. Для Си и Си++ отладчик gdb сразу готов к использованию.


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


Так же для точного перемещения по строкам исходника, желательно установить нуливой уровень оптимизации. Делается это опцией -O0. Такая настройка небходимо для того, чтобы один шаг отладки соответствовал одной команде исходного языка. Если используется оптимизация, машинный код может не соответствовать командам в исходниках, и отладчик будет неадекватно "прыгать", пропуская некоторые команды и будет странно вести себя на отладке циклов.


После того как программа скомпилирована с отладочной информацией, бинарник программы можно запустить под отладчиком следующей командой:



gdb имяБинарникаПрограммы



Основные команды в отладчике gdb



Команда list


Эта команда используется для просмотра текущего исходного кода программы. Сразу при запуске программы команда list будет просматривать код функции main(). Очередная команда list будет продолжать печатать листинг программы с того места, где остановился предыдущий вывод листинга.



list имя_файла:номер_строки



Эта команда используется для просмотра области текста вокруг указанной строки указанного файла. По-умолчанию будет показано 5 строк до указаной строки, 5 строк после. Слева сбоку будут печататься номера строк. Имя файла можно усказывать только абсолютное, с корня файловой системы. Как указать относительное имя файла - не смог разобраться. Если после этой команды дать команду list, то будет продолжена печать листинга именно того файла, на который переключились с помощью команды list имя_файла:номер_строки.


Возникает вопрос: как вернуться к печати листинга того файла, который мы смотрели до команды list имя_файла:строка? Ответ простой: ручками. Нужно ручками написать команду list имя_файла:номер_строки с указанием того файла и номера строки, который мы просматривали. В принципе, это можно быстро сделать, выбрав в истории с помощью клавиши "стрелка вверх" (Up) предыдущую команду list имя_файла:номер_строки.



list имя_функции



Эта команда служит для вывода листинга функции. В каком бы файле не находилась функция, gdb ее сам найдет и напечатает листинг.


Таким образом, быстро вернуться к печати листинга функции main() можно с помощью команды list main.



Команда break


Данная команда создает точку останова. В качестве параметра можно указывать номер строки текущего файла, название функции без скобок или выражение имя-файла:номер-строки.



Команда info breakpoints


Вывод перечня (списка) точек останова.



Команда delete


Удаляет точку останова. В качестве параметра указывается номер точки останова. Номер точки останова можно узнать из списка точек останова.



Команда run


Запуск программы с остановкой в первой попавшейся точке останова.



Команда step


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



Команда next


Пошаговое продолжение выполнения программы без входа в функции.



Команда finish


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



Команда continue


Команда continue продолжит выполнение программы до следующей точки останова.



Команда where


Эта команда просматривает стек вызовов.



Команда print


Эта команда выводит на экран значения переменных. Например, если нужно посмотреть содержимое переменной counter, можно выполнить команду:



print counter

$1=(int) 135



Команда display


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



Команда set


Команда set позволяет изменять значение переменной прямо в момент отладки программы.



Краткий перечень основных команд gdb


  • backtrace – выводит весь путь к текущей точке останова, то есть названия всех функций, начиная от main(); иными словами, выводит весь стек функций;
  • break – устанавливает точку останова, которая может быть задана номером строки текущего файла, названием функции или выражением [имя-файла.ext]:[номер-строки];
  • clear – удаляет все точки останова на текущем уровне стека (то есть в текущей функции);
  • continue – продолжает выполнение программы от текущей точки до следующей точки останова;
  • delete – удаляет точку останова или контрольное выражение;
  • display – добавляет выражение в список выражений, значения которых отображаются каждый раз при остановке программы;
  • finish – выполняет программу до выхода из текущей функции; отображает возвращаемое значение,если такое имеется;
  • info breakpoints – выводит список всех имеющихся точек останова;
  • info watchpoints – выводит список всех имеющихся контрольных выражений;
  • list – выводит исходный код; [имя-файла.ext]:[start-line],[end-line];
  • next – пошаговое выполнение программы, но, в отличие от команды step, не выполняет пошагово вызываемые функции;
  • print – выводит значение какого-либо выражения (выражение передаётся в качестве параметра);
  • run – запускает программу на выполнение в отладочном режиме; предварительно целесообразно задать точки останова;
  • set – устанавливает новое значение переменной;
  • step – пошаговое выполнение программы;
  • watch – устанавливает контрольное выражение, программа остановится, как только значение контрольного выражения изменится;


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования