# Интерфейс отладчика

Для C и C++ &tdevelop; содержит встроенный отладчик, интегрированный с редактором. Технически это реализовано как внешний интерфейс для отладчика &GNU; gdb через каналы (pipe). Отладчик можно запустить несколькими способами:

- Через пункт меню Отладка Запуск, после чего в отладчик загрузится главная программа вашего проекта.

- Через пункт меню Отладка Запуск другого Загрузить файл core загрузится core-файл, генерируемый ядром системы после сбоя программы (это может быть выключено в вашей системе, см. ulimit(1)). Эта отладка полезна для анализа сбоев программы.

- Через пункт меню Отладка Запуск другого Присоединить к процессу отладчик подстроится к уже запущенной программе. Вам нужно будет выбрать её из списка запущенных процессов.

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

Отладчик предлагает несколько видов информации о процессе:

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

Переменные

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

  Можно наблюдать как локальные, так и глобальные переменные. Добавить переменную можно либо нажатием кнопки Добавить, либо нажатием клавиши Enter на выбранном пункте Наблюдение. Удалить их можно через контекстное меню.

Фреймовый стек

- (... в процессе написания ...)

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

- Данная панель позволяет просматривать и управлять точками останова. Для непосредственной отладки используется GDB, так что для полного понимания всех возможностей отладки &tdevelop; необходимо базовое представление о принципе работы GDB.

  Исходный код, содержащий определение точек останова, находится в файле `tdevelop/languages/cpp/debugger/breakpoint.h`.

  На левом краю панели имеются кнопки со следующими функциями:

  - Добавление пустой точки останова

  - Изменение выбранной точки останова

  - Удаление выбранной точки останова

  - Удаление всех точек останова

  Основная часть панели - таблица с 7 столбцами. Каждой строке таблицы соответствует одна точка останова. Столбцы:

  1. Переключатель для выбора точек

  2. Тип: Ошибка, Файл:строка, Точка наблюдения, Адрес или Метод

  3. Статус:

     - Разрешена

     - Запрещена: если точка останова запрещена, при отладке она пропускается.

     - В ожидании (добавление): показывается при отсутствии отладочной информации. Из info-страницы GDB:

       > Если указанное расположение точки останова найти не удалось, это может быть из-за того, что библиотека, в которой оно находится, ещё не загружена. В этом случае можно создать особую точку останова (pending breakpoint), действие которой откладывается до хагрухки необходимой библиотеки.

  4. В ожидании (очистка)

  5. В ожидании (изменение)

  6. Расположение в формате файл:строка

  7. Условие

  8. Счётчик игнорирования: если число `N` больше нуля, то в первые `N` раз при достижении точки останова выполнение программы остановленр не будет.

  9. Попадания: количество достижений точки останова.

Дизассемблирование

- (... в процессе написания ...)

## Установка точек останова

(... в процессе написания ...)

## Параметры

Отобразить обработанные имена

- В программе, написанной на C++, имена функций изменяются (mangled), то есть к начальному имени функции добавляется информация о типах аргументов, которые она принимает. Это необходимо для перегрузки (overload) функций. Алгоритм такой обработки не стандартизован и имеет различные реализации даже в разных версиях компилятора &GNU; C++.

  В окне дизассемблирования отображаются не изменённые имена, однако это можно изменить.

Попробуйте установку точек останова по загрузке библиотеки

- Отладчик gdb не разрешает устанавливать точки останова в коде, не загруженном в данный момент. В приложении с модульной структурой, где код загружается только по требованию (через функцию libc `dlopen(3)`). Возможность установки точек останова в библиотеках предоставляет &tdevelop;. Таким образом, точки останова ставятся в своеобразную очередь и передаются gdb только после загрузки необходимой библиотеки.

Включить плавающую панель

- (... в процессе написания ...)