Отладка с помощью GDB

“Не беспокойтесь, если что-то не функционирует правильно. Если бы все работало, вы были бы без работы.”

Неизвестный

Никита Манович (Itseez)
2013

Содержание

  1. Введение в отладку
  2. Демонстрация: Отладка однопоточного приложения Введение в GDB
  3. Демонстрация: Post-mortem отладка
  4. Демонстрация: Отладка многопоточного приложения
  5. Демонстрация: Удаленная отладка с помощью GDB
  6. Заключение

Отладка и отладчик

Примеры:

Распространенные техники отладки

Общие определения: breakpoint

Breakpoint (точка останова) - это преднамеренное прерывание выполнения программы, при котором выполняется вызов отладчика.

Какие бывают точки останова?

Примеры команд для GDB: break, rbreak, tbreak

Общие определения: watchpoint

Watchpoint - точка останова по данным. Срабатывает, когда меняется значение заданного выражения или переменной.

Примеры команд для GDB: watch, rwatch, awatch

Общие определения: checkpoint

Checkpoint - снимок состояния программы.

Плюсы:

Минусы:

Общие определения: catchpoint

Catchpoint - специальная точка останова, которая срабатывает при достижении специального события, например, C++ исключения или загрузки библиотеки.

Примеры команд для GDB: catch throw, catch catch, catch syscall, catch load.

Общие определения: call stack

Call stack (стек вызовов) - хранит информацию об активных процедурах и функциях.

Приемы против отладки

Краткая история проекта GDB

Наиболее популярный GDB GUI - это DDD Стабильный выпуск: 30 августа, 2013: GDB 7.6.1 Сайт: http://www.gnu.org/software/gdb

Компиляция для отладки (GCC)

Полезные опции для GCC компилятора:

Запуск программ из под GDB

Продолжение и пошаговое исполнение

Вывод информации о стеке вызовов

Просмотр данных

Навигация по исходным файлам

Исполнение в обратном направлении

Текстовый пользовательский интерфейс

Полезные трюки

Post-mortem отладка использование GDB

$ ulimit -a
core file size (blocks, -c) unlimited ...
$ ulimit -c unlimited
$ gdb <program> <core>

Полезные команды GDB:

gcore, generate-core-file <файл> - сгенерировать дамп памяти исследуемого процесса

Резюме

  1. TBD

Контрольные вопросы

  1. Что такое отладка и отладчик?
  2. Назовите 3 метода отладки и опишите их.
  3. Опишите алгоритм отладки "Волчья ограда" (wolf fence).
  4. Расшифруйте и объясните следующие термины: breakpoint, watchpoint, checkpoint, catchpoint и call stack.
  5. Перечислите 3 распространенных приема против отладки.
  6. Объясните назначение отладочной информации и как нужно скомпилировать программу, чтобы она была.
  7. Напишите 5 команд отладчика GDB (запуск, поставить точку останова с условием, продолжить, распечатать локальные переменные, завершить работу отладчика).

Ссылки на литературу:

Спасибо!

Вопросы?