2016-09-28 5 views
1

Я пытаюсь просмотреть содержимое контейнеров C++ STL. Я прочитал here, что последние версии GCC и поддержки GDB довольно печати по умолчанию, но когда я попытался отобразить карту я получил следующее:gdb pretty print не работает

enter image description here

Затем я попытался установить довольно печати в соответствии с this но все же он показывает тот же результат. Может кто-нибудь, пожалуйста, помогите мне? Благодарю.

Я использую Ubuntu 16.04, g ++ 5.4.1, GDB 7.11.1 и python 2.7.12 (установленные из их официальных источников).

+0

ли вы следовать [это] (http://sourceware.org/gdb/wiki/STLSupport) руководство? Является ли предположение правильным, что вы используете Linux и не используете eclipse, поэтому возможности Windows и совместимость с eclipse можно исключить из возможных причин? – starturtle

+0

Я использую Ubuntu 16.04. Да, я следовал этому руководству. Тем не менее я получаю вывод, как показано выше :( – piyukr

+0

Непонятно, что вы * используете * GDB, который пришел с вашим дистрибутивом, или * здание *, ваше собственное. Если первое, оно должно просто работать.Если последнее, вы, вероятно, не построили его правильно. –

ответ

2

В другой теме было указано, что некоторые версии GDB work with Python 3 only.

Это может быть исключено из возможных причин, так как вы не получаете никаких ошибок, насколько описано в вашем описании.

Более на sourceware.org предполагается, что

Вы можете расширить GDB с помощью языка программирования Python. Эта функция доступна только в том случае, если gdb был configure d, используя --with-python.

Не уверен, что вы сделали это, потому что руководство, которое вы использовали, не упоминает об этом напрямую.

+0

Привет, я попытался запустить 'gdb a.out --with-python', он показал' gdb: unrecognized option '--with-python' ' – piyukr

+1

@piyukr Вы передаете' --with-python' в GDB 'configure' скрипт. Когда вы построили GDB, уже слишком поздно. –

+0

@EmployedRussian спасибо, отметили его более четко. – starturtle

2

Вроде бы gdb для Ubuntu 16.04 должен иметь возможность печатать std::map; код питона, который обрабатывает, что в следующий файл из libstdc++6 пакета class StdMapPrinter:

/usr/share/gcc-5/python/libstdcxx/v6/printers.py 

Если ваша цель состоит в том, чтобы сделать это с двоичными файлами вы строите из источника, он все еще может быть полезным, чтобы получить эту работу с родным Сначала пакеты Ubuntu, в качестве основы для сравнения. Вероятная причина, по которой довольно принтеры не работают в gdb, который вы создали сами, это то, что libstdcxx/v6/printers.py (libstdcxx.v6.printers в пространстве имен python) не там, где gdb ожидает его найти.

Кроме того, родной gdb для Ubuntu 16.04 связан с python3, а не с python2; один из способов, чтобы увидеть, что находится на выходе

ldd /usr/bin/gdb 

Оказывается, что libstdcxx.v6.printers родной для Ubuntu 16.04 предназначен для работы с любым python2 или Python3.

Если ваш родной GDB двоичный файл не установлен, вы можете использовать это:

apt install gdb