Как стать автором
Обновить

Отладка C++ программ в ОС GNU/Linux

Так уж случилось, что по долгу работы очень много времени провожу с операционными системами семейства GNU/Linux. И основным видом моей деятельности является разработка программного обеспечения на С++.

Так вот основной проблемой при использовании отладчика – это отображение сложных контейнеров, например, stl-контейнеров.

Решение, которое я предлагаю, актуально для gdb. Этот отладчик поддерживает скрипты, написанные на языке python, а механизмы отображения сложных объектов, называются pretty printers. Т.е. чтобы отладчик отображал нам все правильно, необходимо указать ему где находятся скрипты с этими самыми pretty printers. Для указания отладчику дополнительных команд необходим файл .gdbinit.

Итак, попробую оформить все, как инструкцию, так и читать удобней, и сам не забуду.

1. Установить gcc, g++, gdb, libstdc++-dbg, последнее очень важно, т.к. в свежих дистрибутивах именно с отладочными символами происходит установка скриптов с pretty printers, например, в Ubuntu 14.04 появляется директория /usr/share/gcc-4.8/python/libstdcxx.

2. Создать в домашней директории файл .gdbinit со следующим содержимым:

#
# .gdbinit : GDB Config file
#
# add python pretty printers for STL

python
import sys
sys.path.insert(0, '/usr/share/gcc-4.8/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)

end

set auto-load local-gdbinit on
set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off


Вроде все хорошо, но есть проблема, в последних версиях GNU/Linux, gdb собирают с поддержкой python версии 3.*, а по умолчанию установлен python версии 2.*. Чтобы устранить эту проблему, т.е. сделать скрипты с поддержкой обеих версий python есть патч, можно найти его на просторах сети, можно взять тут: . Изменениям подлежит файл /usr/share/gcc-4.8/python/libstdcxx/v6/printers.py

И снова, вроде все хорошо, но опять есть проблема, на некоторых дистрибутивах не устанавливаются те самые скрипты с pretty printers. Для этого есть svn репозиторий . Вот ссылка с дополнительным описанием:. Если это Ваш случай, то, после выгрузки репозитория, не забудьте в файл .gdbinit изменить путь до скачанных скриптов.

3. При сборке проекта с отладкой не забудьте указать флаг _GLIBCXX_DEBUG. Это необходимо, чтобы правильно отображались такие контейнеры, как stringstream.

В заключение, хочу сказать, «пляски» с pretty printers (второй пункт) не нужны, если Вы используете в качестве IDE QtCreator, т.к. эта IDE использует свои скрипты для взаимодействия с gdb.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.