Отладка 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 есть патч, можно найти его на просторах сети, можно взять тут: _https://www.dropbox.com/s/ef265fbo00yk1x8/libstdcpp.patch. Изменениям подлежит файл /usr/share/gcc-4.8/python/libstdcxx/v6/printers.py

И снова, вроде все хорошо, но опять есть проблема, на некоторых дистрибутивах не устанавливаются те самые скрипты с pretty printers. Для этого есть svn репозиторий _svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python. Вот ссылка с дополнительным описанием: _http://sourceware.org/gdb/wiki/STLSupport. Если это Ваш случай, то, после выгрузки репозитория, не забудьте в файл .gdbinit изменить путь до скачанных скриптов.

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

В заключение, хочу сказать, что «пляски» с pretty printers (второй пункт) не нужны, если вы используете в качестве IDE QtCreator, т.к. эта IDE использует свои скрипты для взаимодействия с gdb.

ссылка на оригинал статьи http://habrahabr.ru/post/234237/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *