Отладочные символы — это критически важный компонент для эффективной отладки программного обеспечения. Они связывают исполняемый код с исходным кодом, позволяя разработчикам видеть имена переменных, функции, строки исходного кода и структуры данных во время отладки. В этом руководстве мы подробно рассмотрим процесс создания, упаковки и установки отладочных символов для проектов на C/C++ в формате DEB пакетов.
Техническое объяснение
Отладочные символы — это специальная метаинформация, которая сохраняется в бинарных файлах во время компиляции. Они включают:
- Таблицы символов — соответствие между адресами в памяти и именами функций/переменных
- Информацию о типах данных — структуры, классы, их члены и методы
- Сведения об исходном коде — номера строк, имена файлов, пути
- Информацию о стеке — расположение локальных переменных и параметров функций
Практическая ценность
Без отладочных символов отладчик показывает только:
- Адреса памяти вместо имен функций
- Машинные коды вместо строк исходного кода
- Шестнадцатеричные значения вместо понятных структур данных
С отладочными символами вы получаете:
- Читаемые имена функций в backtrace
- Возможность просмотра значений переменных по именам
- Навигацию по исходному коду во время отладки
- Понимание структуры сложных объектов
Подготовка проекта
Настройка системы сборки
Чтобы сформировать отдельный deb-пакет с отладочными символами для C++ проекта, собранного через CMake и CPack, достаточно включить соответствующую опцию в CMakeLists.txt и убедиться, что отладочные символы присутствуют в бинарниках — сборка должна быть в режиме «Debug» или «RelWithDebInfo».
Шаги для создания отдельного пакета dbgsym через CPack
- В корневой CMakeLists.txt добавьте:
set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON)
set(CMAKE_BUILD_TYPE Debug)
Переменная CPACK_DEBIAN_DEBUGINFO_PACKAGE отвечает за автоматическую генерацию отдельного .ddeb-пакета с отладочными символами.
- Сборка проекта:
cmake -DCMAKE_BUILD_TYPE=Debug .
make
- Соберите оба пакета:
cpack -G DEB
В результате появятся основной deb-пакет и дополнительный, содержащий только отладочные символы (обычно с суффиксом «dbgsym»).
Важные нюансы
- Не используйте опции, которые заранее «strip»-ят бинарники (например,
CPACK_STRIP_FILES), иначе дебажные символы будут удалены и dbgsym-пакет не соберётся. - Если используются компонентные пакеты, например, несколько библиотек, для каждого компонента можно задать свой debuginfo-пакет через
CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE. - Пакет можно установить обычными средствами (dpkg, apt) для последующей отладки — бинарник основной пакет, dbgsym-пакет загружает отладочные символы, что удобно для анализа аварий и профилирования.
Рекомендуется использовать актуальную версию CMake (от 3.13 и выше), так как поддержка dbgsym-пакетов появилась начиная с этого релиза.
Важно
- Если пакет нужен для релиза, используйте
RelWithDebInfoвместоDebug, чтобы были и оптимизации, и дебаг-символы:
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr ..
Последние статьи
Инструменты разработчика С++/ Qt. Clang-Tidy, Clang-Format в VSCode
В продолжение темы настройки IDE из статьи про Qt6, мы углубимся в инструменты, которые превращают хорошего разработчика в отличного. Речь…
Профилирование памяти в С++
Проблема стабильности программного обеспечения В процессе разработки и эксплуатации программного обеспечения на языке C++ нередко возникают ситуации, требующие детального анализа…
Руководство по созданию и установке отладочных символов в DEB пакетах
Отладочные символы — это критически важный компонент для эффективной отладки программного обеспечения. Они связывают исполняемый код с исходным кодом, позволяя…